|
27 | 27 | AbsNormSafeBestTerminationMode(Base.Fix1(maximum, abs)) |
28 | 28 | ] |
29 | 29 |
|
30 | | - function run_nlsolve_oop(f::F, u0, p = 2.0; solver) where {F} |
31 | | - return @inferred solve(NonlinearProblem{false}(f, u0, p), solver; abstol = 1e-9) |
| 30 | + function run_nlsolve_oop(f::F, u0, p = 2.0; solver, broken_inferred = false) where {F} |
| 31 | + prob = NonlinearProblem{false}(f, u0, p) |
| 32 | + @test @inferred(solve(prob, solver; abstol = 1e-9)) isa |
| 33 | + SciMLBase.AbstractNonlinearSolution broken=broken_inferred |
| 34 | + return solve(prob, solver; abstol = 1e-9) |
32 | 35 | end |
33 | | - function run_nlsolve_iip(f!::F, u0, p = 2.0; solver) where {F} |
34 | | - return @inferred solve(NonlinearProblem{true}(f!, u0, p), solver; abstol = 1e-9) |
| 36 | + function run_nlsolve_iip(f!::F, u0, p = 2.0; solver, broken_inferred = false) where {F} |
| 37 | + prob = NonlinearProblem{true}(f!, u0, p) |
| 38 | + @test @inferred(solve(prob, solver; abstol = 1e-9)) isa |
| 39 | + SciMLBase.AbstractNonlinearSolution broken=broken_inferred |
| 40 | + return solve(prob, solver; abstol = 1e-9) |
35 | 41 | end |
36 | 42 | end |
37 | 43 |
|
38 | 44 | @testitem "First Order Methods" setup=[RootfindTestSnippet] tags=[:core] begin |
39 | | - for alg in ( |
| 45 | + @testset for alg in ( |
40 | 46 | SimpleNewtonRaphson, |
41 | 47 | SimpleTrustRegion, |
42 | 48 | (; kwargs...) -> SimpleTrustRegion(; kwargs..., nlsolve_update_rule = Val(true)) |
|
50 | 56 | ) |
51 | 57 | @testset "[OOP] u0: $(typeof(u0))" for u0 in ( |
52 | 58 | [1.0, 1.0], @SVector[1.0, 1.0], 1.0) |
53 | | - sol = run_nlsolve_oop(quadratic_f, u0; solver = alg(; autodiff)) |
| 59 | + broken_inferred = u0 isa StaticArray && (autodiff isa AutoFiniteDiff || |
| 60 | + (autodiff isa AutoReverseDiff && VERSION < v"1.11")) |
| 61 | + sol = run_nlsolve_oop(quadratic_f, u0; solver = alg(; autodiff), |
| 62 | + broken_inferred) |
54 | 63 | @test SciMLBase.successful_retcode(sol) |
55 | 64 | @test maximum(abs, quadratic_f(sol.u, 2.0)) < 1e-9 |
56 | 65 | end |
|
85 | 94 | ) |
86 | 95 | @testset "[OOP] u0: $(typeof(u0))" for u0 in ( |
87 | 96 | [1.0, 1.0], @SVector[1.0, 1.0], 1.0) |
88 | | - sol = run_nlsolve_oop(quadratic_f, u0; solver = alg(; autodiff)) |
| 97 | + broken_inferred = u0 isa StaticArray && (autodiff isa AutoFiniteDiff || |
| 98 | + (autodiff isa AutoReverseDiff && VERSION < v"1.11")) |
| 99 | + sol = run_nlsolve_oop(quadratic_f, u0; solver = alg(; autodiff), |
| 100 | + broken_inferred) |
89 | 101 | @test SciMLBase.successful_retcode(sol) |
90 | 102 | @test maximum(abs, quadratic_f(sol.u, 2.0)) < 1e-9 |
91 | 103 | end |
|
0 commit comments