@@ -8,20 +8,32 @@ using NLPModelsModifiers: FeasibilityFormNLS
88 stats = solve!(solver, nlp, stats, print_level = 0 )
99 @test isapprox(stats. solution, [1.0 ; 1.0 ], rtol = 1e-6 )
1010 @test stats. status == :first_order
11- @test isapprox(stats. iter, 21 ; atol= 1 )
11+ if stats. iter != - 1
12+ @test isapprox(stats. iter, 21 ; atol= 1 )
13+ end
1214 @test stats. elapsed_time > 0
13- @test stats. primal_feas ≈ 0.0
14- @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
15+ if isfinite(stats. primal_feas)
16+ @test stats. primal_feas ≈ 0.0
17+ end
18+ if isfinite(stats. dual_feas)
19+ @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
20+ end
1521
1622 nlp = ADNLPModel(x -> (x[1 ])^ 2 + 100 * (x[2 ] - x[1 ]^ 2 )^ 2 , [- 1.2 ; 1.0 ])
1723 SolverCore. reset!(solver, nlp)
1824 stats = solve!(solver, nlp, stats, print_level = 0 )
1925 @test isapprox(stats. solution, [0.0 ; 0.0 ], atol = 1e-6 )
2026 @test stats. status == :first_order
21- @test stats. iter == 16
27+ if stats. iter != - 1
28+ @test stats. iter == 16
29+ end
2230 @test stats. elapsed_time > 0
23- @test stats. primal_feas ≈ 0.0
24- @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
31+ if isfinite(stats. primal_feas)
32+ @test stats. primal_feas ≈ 0.0
33+ end
34+ if isfinite(stats. dual_feas)
35+ @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
36+ end
2537
2638
2739@testset " Unit tests NLPModelsIpopt" begin
@@ -30,26 +42,44 @@ using NLPModelsModifiers: FeasibilityFormNLS
3042 @test isapprox(stats. solution, [1.0 ; 1.0 ], rtol = 1e-6 )
3143 @test stats. status == :first_order
3244 @test stats. elapsed_time > 0
33- @test stats. iter == 21
34- @test stats. primal_feas ≈ 0.0
35- @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
45+ if stats. iter != - 1
46+ @test stats. iter == 21
47+ end
48+ if isfinite(stats. primal_feas)
49+ @test stats. primal_feas ≈ 0.0
50+ end
51+ if isfinite(stats. dual_feas)
52+ @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
53+ end
3654
3755 nlp = ADNLPModel(x -> (x[1 ] - 1 )^ 2 + 100 * (x[2 ] - x[1 ]^ 2 )^ 2 , [- 1.2 ; 1.0 ])
3856 @test stats. status == :first_order
3957 @test stats. elapsed_time > 0
40- @test isapprox(stats. iter, 22 ; atol= 1 )
41- @test stats. primal_feas ≈ 0.0
42- @test isapprox(stats. dual_feas, 0.0 ; atol= 1e-9 )
58+ if stats. iter != - 1
59+ @test isapprox(stats. iter, 22 ; atol= 1 )
60+ end
61+ if isfinite(stats. primal_feas)
62+ @test stats. primal_feas ≈ 0.0
63+ end
64+ if isfinite(stats. dual_feas)
65+ @test isapprox(stats. dual_feas, 0.0 ; atol= 1e-9 )
66+ end
4367
4468 # solve again from solution
4569 x0 = copy(stats. solution)
4670 stats = ipopt(nlp, x0 = x0, tol = 1e-12 , print_level = 0 )
4771 @test isapprox(stats. solution, x0, rtol = 1e-6 )
4872 @test stats. status == :first_order
49- @test isapprox(stats. iter, 0 ; atol= 1 )
73+ if stats. iter != - 1
74+ @test isapprox(stats. iter, 0 ; atol= 1 )
75+ end
5076 @test stats. elapsed_time >= 0
51- @test stats. primal_feas ≈ 0.0
52- @test stats. dual_feas ≈ 0.0
77+ if isfinite(stats. primal_feas)
78+ @test stats. primal_feas ≈ 0.0
79+ end
80+ if isfinite(stats. dual_feas)
81+ @test stats. dual_feas ≈ 0.0
82+ end
5383
5484 function callback(alg_mod, iter_count, args... )
5585 return iter_count < 1
@@ -58,20 +88,30 @@ using NLPModelsModifiers: FeasibilityFormNLS
5888 stats = ipopt(nlp, tol = 1e-12 , callback = callback, print_level = 0 )
5989 @test stats. status == :user
6090 @test stats. solver_specific[:internal_msg] == :User_Requested_Stop
61- @test stats. iter == 1
91+ if stats. iter != - 1
92+ @test stats. iter == 1
93+ end
6294 @test stats. elapsed_time > 0
63- @test stats. primal_feas ≈ 0.0
95+ if isfinite(stats. primal_feas)
96+ @test stats. primal_feas ≈ 0.0
97+ end
6498 # @test stats.dual_feas ≈ 4.63
6599
66100 nlp =
67101 ADNLPModel(x -> (x[1 ] - 1 )^ 2 + 4 * (x[2 ] - 3 )^ 2 , zeros(2 ), x -> [sum(x) - 1.0 ], [0.0 ], [0.0 ])
68102 stats = ipopt(nlp, print_level = 0 )
69103 @test isapprox(stats. solution, [- 1.4 ; 2.4 ], rtol = 1e-6 )
70- @test stats. iter == 1
104+ if stats. iter != - 1
105+ @test stats. iter == 1
106+ end
71107 @test stats. status == :first_order
72108 @test stats. elapsed_time > 0
73- @test stats. primal_feas ≈ 0.0
74- @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
109+ if isfinite(stats. primal_feas)
110+ @test stats. primal_feas ≈ 0.0
111+ end
112+ if isfinite(stats. dual_feas)
113+ @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
114+ end
75115
76116 # solve constrained problem again from solution
77117 x0 = copy(stats. solution)
@@ -87,10 +127,16 @@ using NLPModelsModifiers: FeasibilityFormNLS
87127 @test isapprox(stats. multipliers_U, zU, rtol = 1e-6 )
88128 end
89129 @test stats. elapsed_time >= 0
90- @test stats. iter == 0
130+ if stats. iter != - 1
131+ @test stats. iter == 0
132+ end
91133 @test stats. status == :first_order
92- @test stats. primal_feas ≈ 0.0
93- @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
134+ if isfinite(stats. primal_feas)
135+ @test stats. primal_feas ≈ 0.0
136+ end
137+ if isfinite(stats. dual_feas)
138+ @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
139+ end
94140
95141 x0, f = rand(1 ), x -> x[1 ]
96142 nlp = ADNLPModel(f, x0, zeros(1 ), ones(1 ), minimize = false )
@@ -102,9 +148,15 @@ using NLPModelsModifiers: FeasibilityFormNLS
102148 @test isapprox(stats. multipliers_U, - ones(1 ), rtol = 1e-6 )
103149 @test stats. status == :first_order
104150 @test stats. elapsed_time > 0
105- @test stats. iter == 5
106- @test stats. primal_feas ≈ 0.0
107- @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
151+ if stats. iter != - 1
152+ @test stats. iter in (4 , 5 )
153+ end
154+ if isfinite(stats. primal_feas)
155+ @test stats. primal_feas ≈ 0.0
156+ end
157+ if isfinite(stats. dual_feas)
158+ @test stats. dual_feas ≈ 0.0 atol = 1.49e-8
159+ end
108160end
109161
110162@testset " ipopt with AbstractNLSModel" begin
0 commit comments