@@ -8,25 +8,27 @@ using Test
88F (x, θ, deg) = (θ[1 ] - x[1 ])^ deg + θ[2 ] * (x[2 ] - x[1 ]^ deg)^ deg
99F_idx_val (ca) = F (ca[Val (:x )], ca[Val (:θ )], ca[Val (:deg )])
1010F_idx_sym (ca) = F (ca[:x ], ca[:θ ], ca[:deg ])
11+ F_view_val (ca) = F (@view (ca[Val (:x )]), @view (ca[Val (:θ )]), ca[Val (:deg )])
12+ F_view_sym (ca) = F (@view (ca[:x ]), @view (ca[:θ ]), ca[:deg ])
1113F_prop (ca) = F (ca. x, ca. θ, ca. deg)
1214
1315ca = ComponentArray (x = [1 , 2 ], θ = [1.0 , 100.0 ], deg = 2 )
1416truth = [- 400 , 200 ]
1517
16- @testset " $(nameof (F_)) " for F_ in (F_idx_val, F_idx_sym, F_prop)
18+ @testset " $(nameof (F_)) " for F_ in (F_idx_val, F_idx_sym, F_view_val, F_view_sym, F_prop)
1719 finite = FiniteDiff. finite_difference_gradient (ca -> F_ (ca), ca). x
1820 @test finite ≈ truth
1921
2022 forward = ForwardDiff. gradient (ca -> F_ (ca), ca). x
2123 @test forward ≈ truth
2224
2325 reverse = ReverseDiff. gradient (ca -> F_ (ca), ca). x
24- if F_ in (F_idx_val, F_idx_sym)
25- @test_broken reverse ≈ truth
26+ @test reverse ≈ truth
27+
28+ zygote_full = Zygote. gradient (ca -> F_ (ca), ca)[1 ]
29+ if F_ == F_prop && VERSION < v " 1.3"
30+ @test_broken zygote_full. x ≈ truth
2631 else
27- @test reverse ≈ truth
32+ @test zygote_full . x ≈ truth
2833 end
29-
30- zygote = Zygote. gradient (ca -> F_ (ca), ca)[1 ]. x
31- @test zygote ≈ truth
3234end
0 commit comments