def METHOD_NAME():
    tape = Tape()
    set_working_tape(tape)
    n = 100
    mesh = UnitIntervalMesh(n)
    V = FunctionSpace(mesh, "CG", 2)
    def Dt(u, u_, timestep):
        return (u - u_)/timestep
    x, = SpatialCoordinate(mesh)
    pr = project(sin(2*pi*x), V, annotate=False)
    ic = Function(V)
    ic.vector()[:] = pr.vector()[:]
    u_ = Function(V)
    u = Function(V)
    v = TestFunction(V)
    nu = Constant(0.0001)
    timestep = Constant(1.0/n)
    F = (Dt(u, ic, timestep)*v
         + u*u.dx(0)*v + nu*u.dx(0)*v.dx(0))*dx
    bc = DirichletBC(V, 0.0, "on_boundary")
    t = 0.0
    solve(F == 0, u, bc)
    u_.assign(u)
    t += float(timestep)
    F = (Dt(u, u_, timestep)*v
         + u*u.dx(0)*v + nu*u.dx(0)*v.dx(0))*dx
    end = 0.2
    while (t <= end):
        solve(F == 0, u, bc)
        u_.assign(u)
        t += float(timestep)
    J = assemble(u_*u_*dx + ic*ic*dx)
    Jhat = ReducedFunctional(J, Control(ic))
    h = Function(V)
    h.vector()[:] = rng.random(V.dim())
    g = ic.copy(deepcopy=True)
    J.block_variable.adj_value = 1.0
    ic.block_variable.tlm_value = h
    tape.evaluate_adj()
    tape.evaluate_tlm()
    J.block_variable.hessian_value = 0
    tape.evaluate_hessian()
    dJdm = J.block_variable.tlm_value
    Hm = ic.block_variable.hessian_value.vector().inner(h.vector())
    assert taylor_test(Jhat, g, h, dJdm=dJdm, Hm=Hm) > 2.9