@@ -8,24 +8,63 @@ const MOIB = MathOptInterface.Bridges
8
8
9
9
include (" ../utilities.jl" )
10
10
11
- include (" ../simple_model.jl" )
12
-
13
- mock = MOIU. MockOptimizer (SimpleModel {Float64} ())
11
+ mock = MOIU. MockOptimizer (MOIU. Model {Float64} ())
14
12
config = MOIT. TestConfig ()
15
13
16
14
@testset " NonposToNonneg" begin
17
- bridged_mock = MOIB. Variable. NonposToNonneg {Float64} (mock)
15
+ bridged_mock = MOIB. Variable. Zeros {Float64} (mock)
18
16
19
17
MOIU. set_mock_optimize! (mock,
20
18
(mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
21
- mock, MOI. INFEASIBLE, MOI. INFEASIBLE_POINT,
22
- MOI. INFEASIBILITY_CERTIFICATE)
19
+ mock, [1.0 ],
20
+ (MOI. ScalarAffineFunction{Float64}, MOI. EqualTo{Float64}) => 0.0 ,
21
+ (MOI. ScalarAffineFunction{Float64}, MOI. GreaterThan{Float64}) => 1.0 )
22
+ )
23
+
24
+ x, cx = MOI. add_constrained_variable (bridged_mock, MOI. GreaterThan (0.0 ))
25
+ yz, cyz = MOI. add_constrained_variables (bridged_mock, MOI. Zeros (2 ))
26
+ y, z = yz
27
+ fx = MOI. SingleVariable (x)
28
+ fy = MOI. SingleVariable (y)
29
+ fz = MOI. SingleVariable (z)
30
+ c1 = MOI. add_constraint (bridged_mock, 1.0 fy + 1.0 fz, MOI. EqualTo (0.0 ))
31
+ c2 = MOI. add_constraint (bridged_mock, 1.0 fx + 1.0 fy + 1.0 fz, MOI. GreaterThan (1.0 ))
32
+ MOI. set (bridged_mock, MOI. ObjectiveSense (), MOI. MIN_SENSE)
33
+ obj = 1.0 fx - 1.0 fy - 1.0 fz
34
+ MOI. set (bridged_mock, MOI. ObjectiveFunction {typeof(obj)} (), obj)
35
+
36
+ err = ErrorException (
37
+ " Cannot unbridge function because some variables are bridged by" *
38
+ " variable bridges that do not support reverse mapping, e.g.," *
39
+ " `ZerosBridge`."
40
+ )
41
+ @test_throws err MOI. get (bridged_mock, MOI. ObjectiveFunction {typeof(obj)} ())
42
+ # With `c1`, the function does not contain any variable so it tests that it
43
+ # also throws an error even if it never calls `variable_unbridged_function`.
44
+ @test_throws err MOI. get (bridged_mock, MOI. ConstraintFunction (), c1)
45
+ @test_throws err MOI. get (bridged_mock, MOI. ConstraintFunction (), c2)
46
+
47
+ MOI. optimize! (bridged_mock)
48
+ @test MOI. get (bridged_mock, MOI. VariablePrimal (), x) == 1.0
49
+ @test MOI. get (bridged_mock, MOI. VariablePrimal (), y) == 0.0
50
+ @test MOI. get (bridged_mock, MOI. VariablePrimal (), z) == 0.0
51
+
52
+ @test MOI. get (bridged_mock, MOI. ConstraintDual (), cx) == 0.0
53
+ @test MOI. get (bridged_mock, MOI. ConstraintDual (), c1) == 0.0
54
+ @test MOI. get (bridged_mock, MOI. ConstraintDual (), c2) == 1.0
55
+
56
+ err = ArgumentError (
57
+ " Bridge of type `MathOptInterface.Bridges.Variable.ZerosBridge{Float64}`" *
58
+ " does not support accessing the attribute" *
59
+ " `MathOptInterface.ConstraintDual(1)`."
23
60
)
24
- MOIT . lin4test (bridged_mock, config )
61
+ @test_throws err MOI . get (bridged_mock, MOI . ConstraintDual (), cyz )
25
62
26
63
@test MOI. get (mock, MOI. NumberOfVariables ()) == 1
27
- @test length (MOI. get (mock, MOI. ListOfVariableIndices ())) == 1
28
- @test first (MOI. get (mock, MOI. ListOfVariableIndices ())). value ≥ 0
29
- @test MOI. get (bridged_mock, MOI. NumberOfVariables ()) == 1
30
- @test MOI. get (bridged_mock, MOI. ListOfVariableIndices ()) == [MOI. VariableIndex (- 1 )]
64
+ @test MOI. get (mock, MOI. ListOfVariableIndices ()) == [x]
65
+ @test MOI. get (bridged_mock, MOI. NumberOfVariables ()) == 3
66
+ @test MOI. get (bridged_mock, MOI. ListOfVariableIndices ()) == [x, y, z]
67
+ @test MOI. get (mock, MOI. NumberOfConstraints {MOI.VectorOfVariables, MOI.Zeros} ()) == 0
68
+ @test MOI. get (bridged_mock, MOI. NumberOfConstraints {MOI.VectorOfVariables, MOI.Zeros} ()) == 1
69
+ @test MOI. get (bridged_mock, MOI. ListOfConstraintIndices {MOI.VectorOfVariables, MOI.Zeros} ()) == [cyz]
31
70
end
0 commit comments