Skip to content

Commit 2b9719b

Browse files
authored
Merge pull request #324 from JuliaOpt/bl/testdelbridge
Add test_delete_bridge function
2 parents df5aaaa + 7c2fb77 commit 2b9719b

File tree

1 file changed

+29
-76
lines changed

1 file changed

+29
-76
lines changed

test/bridge.jl

Lines changed: 29 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,26 @@ MOIB.@bridge RSOCtoPSD MOIB.RSOCtoPSDCBridge () () (RotatedSecondOrderCone,) ()
7676
MOIB.@bridge LogDet MOIB.LogDetBridge () () (LogDetConeTriangle,) () () () (VectorOfVariables,) (VectorAffineFunction,)
7777
MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (VectorOfVariables,) (VectorAffineFunction,)
7878

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+
7999
@testset "Bridge tests" begin
80100
mock = MOIU.MockOptimizer(SimpleModel{Float64}())
81101
config = MOIT.TestConfig()
@@ -99,19 +119,8 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
99119
MOI.modifyconstraint!(bridgedmock, ci, newf)
100120
@test MOI.canget(bridgedmock, MOI.ConstraintFunction(), typeof(ci))
101121
@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)))
115124
end
116125

117126
@testset "GeoMean" begin
@@ -122,21 +131,8 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
122131
@test !MOI.canget(bridgedmock, MOI.ConstraintDual(), MOI.ConstraintIndex{MOI.VectorOfVariables, MOI.GeometricMeanCone})
123132
ci = first(MOI.get(bridgedmock, MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{Float64}, MOI.GeometricMeanCone}()))
124133
@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)))
140136
end
141137

142138
@testset "SOCtoPSD" begin
@@ -148,17 +144,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
148144
MOIT.soc1ftest(bridgedmock, config)
149145
ci = first(MOI.get(bridgedmock, MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{Float64}, MOI.SecondOrderCone}()))
150146
@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),))
162148
end
163149

164150
@testset "RSOCtoPSD" begin
@@ -172,17 +158,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
172158
MOIT.rotatedsoc1ftest(bridgedmock, config)
173159
ci = first(MOI.get(bridgedmock, MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{Float64}, MOI.RotatedSecondOrderCone}()))
174160
@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),))
186162
end
187163

188164
@testset "LogDet" begin
@@ -193,19 +169,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
193169
@test !MOI.canget(bridgedmock, MOI.ConstraintDual(), MOI.ConstraintIndex{MOI.VectorAffineFunction{Float64}, MOI.LogDetConeTriangle})
194170
ci = first(MOI.get(bridgedmock, MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{Float64}, MOI.LogDetConeTriangle}()))
195171
@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)))
209173
end
210174

211175
@testset "RootDet" begin
@@ -216,18 +180,7 @@ MOIB.@bridge RootDet MOIB.RootDetBridge () () (RootDetConeTriangle,) () () () (V
216180
@test !MOI.canget(bridgedmock, MOI.ConstraintDual(), MOI.ConstraintIndex{MOI.VectorAffineFunction{Float64}, MOI.RootDetConeTriangle})
217181
ci = first(MOI.get(bridgedmock, MOI.ListOfConstraintIndices{MOI.VectorAffineFunction{Float64}, MOI.RootDetConeTriangle}()))
218182
@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)))
232185
end
233186
end

0 commit comments

Comments
 (0)