@@ -2097,7 +2097,7 @@ function test_psd_cone_with_parameter()
20972097 model = POI. Optimizer (cached)
20982098 MOI. set (model, MOI. Silent (), true )
20992099 x = MOI. add_variable (model)
2100- p = first .(MOI. add_constrained_variable .(model, MOI. Parameter (1.0 )), )
2100+ p = first .(MOI. add_constrained_variable .(model, MOI. Parameter (1.0 )))
21012101
21022102 # Set objective: minimize x
21032103 obj_func = MOI. ScalarAffineFunction ([MOI. ScalarAffineTerm (1.0 , x)], 0.0 )
@@ -2142,3 +2142,63 @@ function test_copy_model()
21422142 MOI. optimize! (poi)
21432143 @test MOI. get (poi, MOI. VariablePrimal (), x) ≈ 1.0
21442144end
2145+
2146+ function test_constrained_variable_glpk ()
2147+ optimizer = POI. Optimizer (GLPK. Optimizer ())
2148+ MOI. set (optimizer, MOI. Silent (), true )
2149+ set = MOI. LessThan (1.0 )
2150+ @test MOI. supports_add_constrained_variable (optimizer, typeof (set))
2151+ x, c = MOI. add_constrained_variable (optimizer, set)
2152+ @test x. value == c. value
2153+ @test c isa MOI. ConstraintIndex{typeof (x),typeof (set)}
2154+ @test MOI. get (optimizer, MOI. ConstraintFunction (), c) ≈ x
2155+ @test MOI. get (optimizer, MOI. ConstraintSet (), c) == set
2156+ @test MOI. supports (optimizer, MOI. VariableName (), typeof (x))
2157+ MOI. set (optimizer, MOI. VariableName (), x, " vname" )
2158+ @test MOI. get (optimizer, MOI. VariableName (), x) == " vname"
2159+ MOI. set (optimizer, MOI. ObjectiveSense (), MOI. MAX_SENSE)
2160+ obj_func = 1.0 * x
2161+ MOI. set (optimizer, MOI. ObjectiveFunction {typeof(obj_func)} (), obj_func)
2162+ MOI. optimize! (optimizer)
2163+ @test MOI. get (optimizer, MOI. ConstraintDual (), c) ≈ - 1 atol = ATOL
2164+ @test MOI. get (optimizer, MOI. VariablePrimal (), x) ≈ 1 atol = ATOL
2165+ return
2166+ end
2167+
2168+ include (" no_free_model.jl" )
2169+
2170+ function test_constrained_variable_no_free ()
2171+ optimizer = POI. Optimizer (NoFreeVariablesModel {Float64} ())
2172+ set = MOI. LessThan (1.0 )
2173+ @test MOI. supports_add_constrained_variable (optimizer, typeof (set))
2174+ x, c = MOI. add_constrained_variable (optimizer, set)
2175+ @test c isa MOI. ConstraintIndex{typeof (x),typeof (set)}
2176+ @test x. value == c. value
2177+ @test MOI. get (optimizer, MOI. ConstraintFunction (), c) ≈ x
2178+ @test MOI. get (optimizer, MOI. ConstraintSet (), c) == set
2179+ @test MOI. supports (optimizer, MOI. VariableName (), typeof (x))
2180+ MOI. set (optimizer, MOI. VariableName (), x, " vname" )
2181+ @test MOI. get (optimizer, MOI. VariableName (), x) == " vname"
2182+ MOI. set (optimizer, MOI. ObjectiveSense (), MOI. MAX_SENSE)
2183+ obj_func = 1.0 * x
2184+ MOI. set (optimizer, MOI. ObjectiveFunction {typeof(obj_func)} (), obj_func)
2185+ return
2186+ end
2187+
2188+ function test_constrained_variables ()
2189+ optimizer = POI. Optimizer {Int} (NoFreeVariablesModel {Int} ())
2190+ set = MOI. Nonnegatives (2 )
2191+ @test MOI. supports_add_constrained_variables (optimizer, typeof (set))
2192+ x, c = MOI. add_constrained_variables (optimizer, set)
2193+ @test c isa MOI. ConstraintIndex{MOI. VectorOfVariables,typeof (set)}
2194+ @test MOI. get (optimizer, MOI. ConstraintFunction (), c) ≈
2195+ MOI. VectorOfVariables (x)
2196+ @test MOI. get (optimizer, MOI. ConstraintSet (), c) == set
2197+ @test MOI. supports (optimizer, MOI. VariableName (), eltype (x))
2198+ MOI. set (optimizer, MOI. VariableName (), x[1 ], " vname" )
2199+ @test MOI. get (optimizer, MOI. VariableName (), x[1 ]) == " vname"
2200+ MOI. set (optimizer, MOI. ObjectiveSense (), MOI. MIN_SENSE)
2201+ obj_func = 1 * x[1 ] + 1 * x[2 ]
2202+ MOI. set (optimizer, MOI. ObjectiveFunction {typeof(obj_func)} (), obj_func)
2203+ return
2204+ end
0 commit comments