@@ -977,7 +977,7 @@ function test_changing_factorization()
977977 )
978978end
979979
980- function test_reverse_bounds ()
980+ function test_reverse_bounds_lower ()
981981 model = DiffOpt. nonlinear_diff_model (Ipopt. Optimizer)
982982 set_silent (model)
983983 @variable (model, x[1 : 3 ] >= 0 ) # x[3] ≥ 0 is active
@@ -992,6 +992,21 @@ function test_reverse_bounds()
992992 @test isapprox (dp, - 2.88888 ; atol = 1e-4 )
993993end
994994
995+ function test_reverse_bounds_upper ()
996+ model = DiffOpt. nonlinear_diff_model (Ipopt. Optimizer)
997+ set_silent (model)
998+ @variable (model, x[1 : 3 ] <= 0 ) # x[3] ≤ 0 is active
999+ @variable (model, p in MOI. Parameter (4.5 ))
1000+ @constraint (model, 6 x[1 ] + 3 x[2 ] + 2 x[3 ] == - p)
1001+ @constraint (model, x[1 ] + x[2 ] - x[3 ] == - 1 )
1002+ @objective (model, Min, sum (x.^ 2 ))
1003+ optimize! (model)
1004+ MOI. set (model, DiffOpt. ReverseConstraintDual (), UpperBoundRef (x[3 ]), 1.0 )
1005+ DiffOpt. reverse_differentiate! (model)
1006+ dp = MOI. get (model, DiffOpt. ReverseConstraintSet (), ParameterRef (p)). value
1007+ @test isapprox (dp, 2.88888 ; atol = 1e-4 )
1008+ end
1009+
9951010end # module
9961011
9971012TestNLPProgram. runtests ()
0 commit comments