@@ -76,6 +76,26 @@ MOIB.@bridge RSOCtoPSD MOIB.RSOCtoPSDCBridge () () (RotatedSecondOrderCone,) ()
76
76
MOIB. @bridge LogDet MOIB. LogDetBridge () () (LogDetConeTriangle,) () () () (VectorOfVariables,) (VectorAffineFunction,)
77
77
MOIB. @bridge RootDet MOIB. RootDetBridge () () (RootDetConeTriangle,) () () () (VectorOfVariables,) (VectorAffineFunction,)
78
78
79
+ # Test deletion of bridge
80
+ function test_delete_bridge (m:: MOIB.AbstractBridgeOptimizer , ci:: MOI.ConstraintIndex{F, S} , nvars:: Int , nocs:: Tuple ) where {F, S}
81
+ @test MOI. get (m, MOI. NumberOfVariables ()) == nvars
82
+ test_noc (m, F, S, 1 )
83
+ for noc in nocs
84
+ test_noc (m, noc... )
85
+ end
86
+ @test MOI. isvalid (m, ci)
87
+ @test MOI. candelete (m, ci)
88
+ MOI. delete! (m, ci)
89
+ @test ! MOI. isvalid (m, ci)
90
+ @test isempty (m. bridges)
91
+ test_noc (m, F, S, 0 )
92
+ # As the bridge has been removed, if the constraints it has created where not removed, it wouldn't be there to decrease this counter anymore
93
+ @test MOI. get (m, MOI. NumberOfVariables ()) == nvars
94
+ for noc in nocs
95
+ test_noc (m, noc... )
96
+ end
97
+ end
98
+
79
99
@testset " Bridge tests" begin
80
100
mock = MOIU. MockOptimizer (SimpleModel {Float64} ())
81
101
config = MOIT. TestConfig ()
@@ -99,19 +119,8 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
99
119
MOI. modifyconstraint! (bridgedmock, ci, newf)
100
120
@test MOI. canget (bridgedmock, MOI. ConstraintFunction (), typeof (ci))
101
121
@test MOI. get (bridgedmock, MOI. ConstraintFunction (), ci) ≈ newf
102
- # Test deletion
103
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 2
104
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. GreaterThan{Float64}, 0 )
105
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. Interval{Float64}, 1 )
106
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. LessThan{Float64}, 0 )
107
- @test MOI. isvalid (bridgedmock, ci)
108
- @test MOI. candelete (bridgedmock, ci)
109
- MOI. delete! (bridgedmock, ci)
110
- @test isempty (bridgedmock. bridges)
111
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 2
112
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. GreaterThan{Float64}, 0 )
113
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. Interval{Float64}, 0 )
114
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. LessThan{Float64}, 0 )
122
+ test_delete_bridge (bridgedmock, ci, 2 , ((MOI. ScalarAffineFunction{Float64}, MOI. GreaterThan{Float64}, 0 ),
123
+ (MOI. ScalarAffineFunction{Float64}, MOI. LessThan{Float64}, 0 )))
115
124
end
116
125
117
126
@testset " GeoMean" begin
@@ -122,21 +131,8 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
122
131
@test ! MOI. canget (bridgedmock, MOI. ConstraintDual (), MOI. ConstraintIndex{MOI. VectorOfVariables, MOI. GeometricMeanCone})
123
132
ci = first (MOI. get (bridgedmock, MOI. ListOfConstraintIndices {MOI.VectorAffineFunction{Float64}, MOI.GeometricMeanCone} ()))
124
133
@test ! MOI. canmodifyconstraint (bridgedmock, ci, MOI. VectorAffineFunction{Float64})
125
- # Test deletion
126
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 4
127
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. GeometricMeanCone, 1 )
128
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 )
129
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. LessThan{Float64}, 1 )
130
- @test MOI. isvalid (bridgedmock, ci)
131
- @test MOI. candelete (bridgedmock, ci)
132
- MOI. delete! (bridgedmock, ci)
133
- @test ! MOI. isvalid (bridgedmock, ci)
134
- @test isempty (bridgedmock. bridges)
135
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. GeometricMeanCone, 0 )
136
- # As the bridge has been removed, if the constraints it has created where not removed, it wouldn't be there to decrease this counter anymore
137
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 4
138
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 )
139
- test_noc (bridgedmock, MOI. ScalarAffineFunction{Float64}, MOI. LessThan{Float64}, 1 )
134
+ test_delete_bridge (bridgedmock, ci, 4 , ((MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 ),
135
+ (MOI. ScalarAffineFunction{Float64}, MOI. LessThan{Float64}, 1 )))
140
136
end
141
137
142
138
@testset " SOCtoPSD" begin
@@ -148,17 +144,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
148
144
MOIT. soc1ftest (bridgedmock, config)
149
145
ci = first (MOI. get (bridgedmock, MOI. ListOfConstraintIndices {MOI.VectorAffineFunction{Float64}, MOI.SecondOrderCone} ()))
150
146
@test ! MOI. canmodifyconstraint (bridgedmock, ci, MOI. VectorAffineFunction{Float64})
151
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 3
152
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. SecondOrderCone, 1 )
153
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
154
- @test MOI. isvalid (bridgedmock, ci)
155
- @test MOI. candelete (bridgedmock, ci)
156
- MOI. delete! (bridgedmock, ci)
157
- @test ! MOI. isvalid (bridgedmock, ci)
158
- @test isempty (bridgedmock. bridges)
159
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 3
160
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. SecondOrderCone, 0 )
161
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
147
+ test_delete_bridge (bridgedmock, ci, 3 , ((MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 ),))
162
148
end
163
149
164
150
@testset " RSOCtoPSD" begin
@@ -172,17 +158,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
172
158
MOIT. rotatedsoc1ftest (bridgedmock, config)
173
159
ci = first (MOI. get (bridgedmock, MOI. ListOfConstraintIndices {MOI.VectorAffineFunction{Float64}, MOI.RotatedSecondOrderCone} ()))
174
160
@test ! MOI. canmodifyconstraint (bridgedmock, ci, MOI. VectorAffineFunction{Float64})
175
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 2
176
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 1 )
177
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
178
- @test MOI. isvalid (bridgedmock, ci)
179
- @test MOI. candelete (bridgedmock, ci)
180
- MOI. delete! (bridgedmock, ci)
181
- @test ! MOI. isvalid (bridgedmock, ci)
182
- @test isempty (bridgedmock. bridges)
183
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 2
184
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 )
185
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
161
+ test_delete_bridge (bridgedmock, ci, 2 , ((MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 ),))
186
162
end
187
163
188
164
@testset " LogDet" begin
@@ -193,19 +169,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
193
169
@test ! MOI. canget (bridgedmock, MOI. ConstraintDual (), MOI. ConstraintIndex{MOI. VectorAffineFunction{Float64}, MOI. LogDetConeTriangle})
194
170
ci = first (MOI. get (bridgedmock, MOI. ListOfConstraintIndices {MOI.VectorAffineFunction{Float64}, MOI.LogDetConeTriangle} ()))
195
171
@test ! MOI. canmodifyconstraint (bridgedmock, ci, MOI. VectorAffineFunction{Float64})
196
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 4
197
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. LogDetConeTriangle, 1 )
198
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. ExponentialCone, 0 )
199
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
200
- @test MOI. isvalid (bridgedmock, ci)
201
- @test MOI. candelete (bridgedmock, ci)
202
- MOI. delete! (bridgedmock, ci)
203
- @test ! MOI. isvalid (bridgedmock, ci)
204
- @test isempty (bridgedmock. bridges)
205
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 4
206
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. LogDetConeTriangle, 0 )
207
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. ExponentialCone, 0 )
208
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
172
+ test_delete_bridge (bridgedmock, ci, 4 , ((MOI. VectorAffineFunction{Float64}, MOI. ExponentialCone, 0 ), (MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )))
209
173
end
210
174
211
175
@testset " RootDet" begin
@@ -216,18 +180,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
216
180
@test ! MOI. canget (bridgedmock, MOI. ConstraintDual (), MOI. ConstraintIndex{MOI. VectorAffineFunction{Float64}, MOI. RootDetConeTriangle})
217
181
ci = first (MOI. get (bridgedmock, MOI. ListOfConstraintIndices {MOI.VectorAffineFunction{Float64}, MOI.RootDetConeTriangle} ()))
218
182
@test ! MOI. canmodifyconstraint (bridgedmock, ci, MOI. VectorAffineFunction{Float64})
219
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 4
220
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RootDetConeTriangle, 1 )
221
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 )
222
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
223
- @test MOI. isvalid (bridgedmock, ci)
224
- @test MOI. candelete (bridgedmock, ci)
225
- MOI. delete! (bridgedmock, ci)
226
- @test ! MOI. isvalid (bridgedmock, ci)
227
- @test isempty (bridgedmock. bridges)
228
- @test MOI. get (bridgedmock, MOI. NumberOfVariables ()) == 4
229
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RootDetConeTriangle, 0 )
230
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 )
231
- test_noc (bridgedmock, MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )
183
+ test_delete_bridge (bridgedmock, ci, 4 , ((MOI. VectorAffineFunction{Float64}, MOI. RotatedSecondOrderCone, 0 ),
184
+ (MOI. VectorAffineFunction{Float64}, MOI. PositiveSemidefiniteConeTriangle, 0 )))
232
185
end
233
186
end
0 commit comments