diff --git a/test/test_new_world_grudge.py b/test/test_new_world_grudge.py
index 5379dfcfb2e95e1b39c69310a981bcf50a97c15d..3c4ab986c13eee1cfc7067ccd4f78b48f9548a32 100644
--- a/test/test_new_world_grudge.py
+++ b/test/test_new_world_grudge.py
@@ -45,6 +45,50 @@ import logging
 logger = logging.getLogger(__name__)
 
 
+# {{{ inverse metric
+
+@pytest.mark.parametrize("dim", [2, 3])
+def test_inverse_metric(actx_factory, dim):
+    actx = actx_factory()
+
+    mesh = mgen.generate_regular_rect_mesh(
+        a=(-0.5,)*dim, b=(0.5,)*dim,
+        nelements_per_axis=(6,)*dim, order=4
+    )
+
+    def m(x):
+        result = np.empty_like(x)
+        result[0] = (
+                1.5*x[0] + np.cos(x[0])
+                + 0.1*np.sin(10*x[1]))
+        result[1] = (
+                0.05*np.cos(10*x[0])
+                + 1.3*x[1] + np.sin(x[1]))
+        if len(x) == 3:
+            result[2] = x[2]
+        return result
+
+    from meshmode.mesh.processing import map_mesh
+    mesh = map_mesh(mesh, m)
+
+    dcoll = DiscretizationCollection(actx, mesh, order=4)
+
+    from grudge.geometry import \
+        forward_metric_derivative_mat, inverse_metric_derivative_mat
+
+    mat = forward_metric_derivative_mat(actx, dcoll).dot(
+        inverse_metric_derivative_mat(actx, dcoll))
+
+    for i in range(mesh.dim):
+        for j in range(mesh.dim):
+            tgt = 1 if i == j else 0
+
+            err = actx.np.linalg.norm(mat[i, j] - tgt, ord=np.inf)
+            logger.info("error[%d, %d]: %.5e", i, j, err)
+            assert err < 1.0e-12, (i, j, err)
+
+# }}}
+
 # {{{ mass operator
 
 @pytest.mark.parametrize("ambient_dim", [1, 2, 3])