@@ -13,28 +13,37 @@ config = MOIT.TestConfig()
13
13
14
14
bridged_mock = MOIB. Variable. Zeros {Float64} (mock)
15
15
16
- MOIU. set_mock_optimize! (mock,
17
- (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
18
- mock, [1.0 ],
19
- (MOI. ScalarAffineFunction{Float64}, MOI. EqualTo{Float64}) => 0.0 ,
20
- (MOI. ScalarAffineFunction{Float64}, MOI. GreaterThan{Float64}) => 1.0 )
21
- )
22
-
23
16
x, cx = MOI. add_constrained_variable (bridged_mock, MOI. GreaterThan (0.0 ))
24
17
yz, cyz = MOI. add_constrained_variables (bridged_mock, MOI. Zeros (2 ))
25
18
y, z = yz
26
19
fx = MOI. SingleVariable (x)
27
20
fy = MOI. SingleVariable (y)
28
21
fz = MOI. SingleVariable (z)
29
- c1 = MOI. add_constraint (bridged_mock, 1.0 fy + 1.0 fz, MOI. EqualTo (0.0 ))
30
- c2 = MOI. add_constraint (bridged_mock, 1.0 fx + 1.0 fy + 1.0 fz, MOI. GreaterThan (1.0 ))
22
+ c1, c2 = MOI. add_constraints (
23
+ bridged_mock, [1.0 fy + 1.0 fz, 1.0 fx + 1.0 fy + 1.0 fz],
24
+ [MOI. EqualTo (0.0 ), MOI. GreaterThan (1.0 )]
25
+ )
26
+ # c2 = MOI.add_constraint(bridged_mock, , )
31
27
MOI. set (bridged_mock, MOI. ObjectiveSense (), MOI. MIN_SENSE)
32
28
obj = 1.0 fx - 1.0 fy - 1.0 fz
33
29
MOI. set (bridged_mock, MOI. ObjectiveFunction {typeof(obj)} (), obj)
34
30
35
31
@test MOIB. Variable. unbridged_map (MOIB. bridge (bridged_mock, y), y, MOIB. Variable. IndexInVector (1 )) === nothing
36
32
@test MOIB. Variable. unbridged_map (MOIB. bridge (bridged_mock, z), z, MOIB. Variable. IndexInVector (2 )) === nothing
37
33
34
+ err = ErrorException (
35
+ " Cannot add two `VectorOfVariables`-in-`MathOptInterface.Zeros` on the" *
36
+ " same first variable MathOptInterface.VariableIndex(-1)."
37
+ )
38
+ @test_throws err MOI. add_constraint (bridged_mock, MOI. VectorOfVariables (yz), MOI. Zeros (2 ))
39
+
40
+ err = ErrorException (
41
+ " Cannot `VectorOfVariables`-in-`MathOptInterface.Zeros` for" *
42
+ " which some variables are bridged but not the first one" *
43
+ " `MathOptInterface.VariableIndex(12345679)`."
44
+ )
45
+ @test_throws err MOI. add_constraint (bridged_mock, MOI. VectorOfVariables ([x, y]), MOI. Zeros (2 ))
46
+
38
47
err = ErrorException (
39
48
" Cannot unbridge function because some variables are bridged by" *
40
49
" variable bridges that do not support reverse mapping, e.g.," *
@@ -52,28 +61,45 @@ err = ArgumentError(
52
61
)
53
62
@test_throws err MOI. get (bridged_mock, MOIT. UnknownVariableAttribute (), y)
54
63
55
- MOI. optimize! (bridged_mock)
56
- @test MOI. get (bridged_mock, MOI. VariablePrimal (), x) == 1.0
57
- @test MOI. get (bridged_mock, MOI. VariablePrimal (), y) == 0.0
58
- @test MOI. get (bridged_mock, MOI. VariablePrimal (), z) == 0.0
64
+ @testset " Results" begin
65
+ MOIU. set_mock_optimize! (mock,
66
+ (mock:: MOIU.MockOptimizer ) -> MOIU. mock_optimize! (
67
+ mock, [1.0 ],
68
+ (MOI. ScalarAffineFunction{Float64}, MOI. EqualTo{Float64}) => 0.0 ,
69
+ (MOI. ScalarAffineFunction{Float64}, MOI. GreaterThan{Float64}) => 1.0 )
70
+ )
71
+ MOI. optimize! (bridged_mock)
72
+ @test MOI. get (bridged_mock, MOI. VariablePrimal (), x) == 1.0
73
+ @test MOI. get (bridged_mock, MOI. VariablePrimal (), y) == 0.0
74
+ @test MOI. get (bridged_mock, MOI. VariablePrimal (), z) == 0.0
59
75
60
- @test MOI. get (bridged_mock, MOI. ConstraintPrimal (), cyz) == zeros (2 )
76
+ @test MOI. get (bridged_mock, MOI. ConstraintPrimal (), cyz) == zeros (2 )
61
77
62
- @test MOI. get (bridged_mock, MOI. ConstraintDual (), cx) == 0.0
63
- @test MOI. get (bridged_mock, MOI. ConstraintDual (), c1) == 0.0
64
- @test MOI. get (bridged_mock, MOI. ConstraintDual (), c2) == 1.0
78
+ @test MOI. get (bridged_mock, MOI. ConstraintDual (), cx) == 0.0
79
+ @test MOI. get (bridged_mock, MOI. ConstraintDual (), c1) == 0.0
80
+ @test MOI. get (bridged_mock, MOI. ConstraintDual (), c2) == 1.0
65
81
66
- err = ArgumentError (
67
- " Bridge of type `MathOptInterface.Bridges.Variable.ZerosBridge{Float64}`" *
68
- " does not support accessing the attribute" *
69
- " `MathOptInterface.ConstraintDual(1)`."
70
- )
71
- @test_throws err MOI. get (bridged_mock, MOI. ConstraintDual (), cyz)
72
-
73
- @test MOI. get (mock, MOI. NumberOfVariables ()) == 1
74
- @test MOI. get (mock, MOI. ListOfVariableIndices ()) == [x]
75
- @test MOI. get (bridged_mock, MOI. NumberOfVariables ()) == 3
76
- @test MOI. get (bridged_mock, MOI. ListOfVariableIndices ()) == [x, y, z]
77
- @test MOI. get (mock, MOI. NumberOfConstraints {MOI.VectorOfVariables, MOI.Zeros} ()) == 0
78
- @test MOI. get (bridged_mock, MOI. NumberOfConstraints {MOI.VectorOfVariables, MOI.Zeros} ()) == 1
79
- @test MOI. get (bridged_mock, MOI. ListOfConstraintIndices {MOI.VectorOfVariables, MOI.Zeros} ()) == [cyz]
82
+ err = ArgumentError (
83
+ " Bridge of type `MathOptInterface.Bridges.Variable.ZerosBridge{Float64}`" *
84
+ " does not support accessing the attribute" *
85
+ " `MathOptInterface.ConstraintDual(1)`."
86
+ )
87
+ @test_throws err MOI. get (bridged_mock, MOI. ConstraintDual (), cyz)
88
+ end
89
+
90
+ @testset " Query" begin
91
+ @test MOI. get (mock, MOI. NumberOfVariables ()) == 1
92
+ @test MOI. get (mock, MOI. ListOfVariableIndices ()) == [x]
93
+ @test MOI. get (bridged_mock, MOI. NumberOfVariables ()) == 3
94
+ @test MOI. get (bridged_mock, MOI. ListOfVariableIndices ()) == [x, y, z]
95
+ @test MOI. get (mock, MOI. NumberOfConstraints {MOI.VectorOfVariables, MOI.Zeros} ()) == 0
96
+ @test MOI. get (bridged_mock, MOI. NumberOfConstraints {MOI.VectorOfVariables, MOI.Zeros} ()) == 1
97
+ @test MOI. get (bridged_mock, MOI. ListOfConstraintIndices {MOI.VectorOfVariables, MOI.Zeros} ()) == [cyz]
98
+ end
99
+
100
+ @testset " SingleVariable objective" begin
101
+ err = ErrorException (" Using bridged variable in `SingleVariable` function." )
102
+ @test_throws err MOI. set (bridged_mock, MOI. ObjectiveFunction {typeof(fy)} (), fy)
103
+ MOI. set (bridged_mock, MOI. ObjectiveFunction {typeof(fx)} (), fx)
104
+ @test MOI. get (bridged_mock, MOI. ObjectiveFunction {typeof(fx)} ()) == fx
105
+ end
0 commit comments