def METHOD_NAME(extmesh, testcase, convrate):
    hfamily, hdegree, vfamily, vdegree, orientation = testcase
    l2err = np.zeros(2)
    for ii in range(len(l2err)):
        mesh = extmesh(2**(ii+1), 2**(ii+1), 2**(ii+1))
        exactfspace = VectorFunctionSpace(mesh, "Lagrange", 3)
        horiz_elt = FiniteElement(hfamily, "triangle", hdegree)
        vert_elt = FiniteElement(vfamily, "interval", vdegree)
        product_elt = HDiv(TensorProductElement(horiz_elt, vert_elt))
        fspace = FunctionSpace(mesh, product_elt)
        u = TrialFunction(fspace)
        v = TestFunction(fspace)
        x, y, z = SpatialCoordinate(mesh)
        if orientation == "h":
            expr = as_vector([x*y*z*z, x*x*y*z, Constant(0.0)])
        elif orientation == "v":
            expr = as_vector([Constant(0.0), Constant(0.0), x*y*y*z])
        exact = Function(exactfspace)
        exact.interpolate(expr)
        out = Function(fspace)
        solve(inner(u, v)*dx == inner(exact, v)*dx, out)
        l2err[ii] = sqrt(assemble(inner((out-exact), (out-exact))*dx))
    assert (np.array([np.log2(l2err[i]/l2err[i+1]) for i in range(len(l2err)-1)]) > convrate).all()