@@ -382,38 +382,68 @@ df = zero(x)
382382df_ref = diag (J_ref)
383383epsilon = zero (x)
384384forward_cache = FiniteDiff. JacobianCache (x, Val{:forward }, eltype (x))
385+ forward_jvp_cache = FiniteDiff. JVPCache (x, Val{:forward })
385386@test forward_cache. colorvec == 1 : length (x)
386387central_cache = FiniteDiff. JacobianCache (x, Val{:central }, eltype (x))
388+ central_jvp_cache = FiniteDiff. JVPCache (x, Val{:central })
387389complex_cache = FiniteDiff. JacobianCache (x, Val{:complex }, eltype (x))
388390f_in = copy (y)
391+ vdir = rand (2 )
392+ jvp_ref = J_ref* vdir
389393
390394@time @testset " Out-of-Place Jacobian StridedArray real-valued tests" begin
391- @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache), J_ref) < 1e-4
392- @test err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache, dir= - 1 ), J_ref) < 1e-4
393- @test_throws Any err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache), J_ref) < 1e-4
394- @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-4
395- @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, f_in), J_ref) < 1e-4
395+ @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache), J_ref) < 1e-6
396+ @test err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache, dir= - 1 ), J_ref) < 1e-6
397+ @test_throws Any err_func (FiniteDiff. finite_difference_jacobian (oopff, x, forward_cache), J_ref) < 1e-6
398+ @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-6
399+ @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, forward_cache, f_in), J_ref) < 1e-6
396400 @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, central_cache), J_ref) < 1e-8
397401 @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, Val{:central }), J_ref) < 1e-8
398402 @test err_func (FiniteDiff. finite_difference_jacobian (oopf, x, complex_cache), J_ref) < 1e-14
399403end
400404
405+ @time @testset " Out-of-Place JVP StridedArray real-valued tests" begin
406+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
407+ @test err_func (FiniteDiff. finite_difference_jvp (oopff, x, vdir, forward_jvp_cache, dir= - 1 ), jvp_ref) < 1e-6
408+ @test_throws Any err_func (FiniteDiff. finite_difference_jvp (oopff, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
409+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, forward_jvp_cache, relstep= sqrt (eps ())), jvp_ref) < 1e-6
410+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, forward_jvp_cache, f_in), jvp_ref) < 1e-6
411+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, central_jvp_cache), jvp_ref) < 1e-8
412+ @test err_func (FiniteDiff. finite_difference_jvp (oopf, x, vdir, Val{:central }), jvp_ref) < 1e-8
413+ end
414+
401415function test_iipJac (J_ref, args... ; kwargs... )
402416 _J = zero (J_ref)
403417 FiniteDiff. finite_difference_jacobian! (_J, args... ; kwargs... )
404418 _J
405419end
406420@time @testset " inPlace Jacobian StridedArray real-valued tests" begin
407- @test err_func (test_iipJac (J_ref, iipf, x, forward_cache), J_ref) < 1e-4
408- @test err_func (test_iipJac (J_ref, iipff, x, forward_cache, dir= - 1 ), J_ref) < 1e-4
409- @test_throws Any err_func (test_iipJac (J_ref, iipff, x, forward_cache), J_ref) < 1e-4
410- @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-4
411- @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, f_in), J_ref) < 1e-4
421+ @test err_func (test_iipJac (J_ref, iipf, x, forward_cache), J_ref) < 1e-6
422+ @test err_func (test_iipJac (J_ref, iipff, x, forward_cache, dir= - 1 ), J_ref) < 1e-6
423+ @test_throws Any err_func (test_iipJac (J_ref, iipff, x, forward_cache), J_ref) < 1e-6
424+ @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, relstep= sqrt (eps ())), J_ref) < 1e-6
425+ @test err_func (test_iipJac (J_ref, iipf, x, forward_cache, f_in), J_ref) < 1e-6
412426 @test err_func (test_iipJac (J_ref, iipf, x, central_cache), J_ref) < 1e-8
413427 @test err_func (test_iipJac (J_ref, iipf, x, Val{:central }), J_ref) < 1e-8
414428 @test err_func (test_iipJac (J_ref, iipf, x, complex_cache), J_ref) < 1e-14
415429end
416430
431+ function test_iipJVP (jvp_ref, args... ; kwargs... )
432+ _jvp = zero (jvp_ref)
433+ FiniteDiff. finite_difference_jvp! (_jvp, args... ; kwargs... )
434+ _jvp
435+ end
436+
437+ @time @testset " inPlace JVP StridedArray real-valued tests" begin
438+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
439+ @test err_func (test_iipJVP (jvp_ref, iipff, x, vdir, forward_jvp_cache, dir= - 1 ), jvp_ref) < 1e-6
440+ @test_throws Any err_func (test_iipJVP (jvp_ref, iipff, x, vdir, forward_jvp_cache), jvp_ref) < 1e-6
441+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, forward_jvp_cache, relstep= sqrt (eps ())), jvp_ref) < 1e-6
442+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, forward_jvp_cache, f_in), jvp_ref) < 1e-6
443+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, central_jvp_cache), jvp_ref) < 1e-8
444+ @test err_func (test_iipJVP (jvp_ref, iipf, x, vdir, Val{:central }), jvp_ref) < 1e-8
445+ end
446+
417447function iipf (fvec, x)
418448 fvec[1 ] = (im * x[1 ] + 3 ) * (x[2 ]^ 3 - 7 ) + 18
419449 fvec[2 ] = sin (x[2 ] * exp (x[1 ]) - 1 )
0 commit comments