def METHOD_NAME(self):  # Trailing _ manipulates the random seed
    # Create model
    model = pybamm.BaseModel()
    model.convert_to_format = "jax"
    domain = ["negative electrode", "separator", "positive electrode"]
    var = pybamm.Variable("var", domain=domain)
    model.rhs = {var: 0.1 * var}
    model.initial_conditions = {var: 1}
    # No need to set parameters; can use base discretisation (no spatial operators)
    # create discretisation
    mesh = get_mesh_for_testing()
    spatial_methods = {"macroscale": pybamm.FiniteVolume()}
    disc = pybamm.Discretisation(mesh, spatial_methods)
    disc.process_model(model)
    # Solve
    t_eval = np.linspace(0.0, 1.0, 80)
    y0 = model.concatenated_initial_conditions.evaluate().reshape(-1)
    rhs = pybamm.EvaluatorJax(model.concatenated_rhs)
    def fun(y, t):
        return rhs(t=t, y=y).reshape(-1)
    t0 = time.perf_counter()
    y = pybamm.jax_bdf_integrate(fun, y0, t_eval, rtol=1e-8, atol=1e-8)
    t1 = time.perf_counter() - t0
    # test accuracy
    np.testing.assert_allclose(y[:, 0], np.exp(0.1 * t_eval), rtol=1e-6, atol=1e-6)
    t0 = time.perf_counter()
    y = pybamm.jax_bdf_integrate(fun, y0, t_eval, rtol=1e-8, atol=1e-8)
    t2 = time.perf_counter() - t0
    # second run should be much quicker
    self.assertLess(t2, t1)
    # test second run is accurate
    np.testing.assert_allclose(y[:, 0], np.exp(0.1 * t_eval), rtol=1e-6, atol=1e-6)