@@ -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