Skip to content

Commit 2eb6a65

Browse files
committed
Add tests
1 parent 9c0eb8a commit 2eb6a65

File tree

9 files changed

+49
-12
lines changed

9 files changed

+49
-12
lines changed

src/Bridges/Bridges.jl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,12 @@ function _runtests(
299299
variable_start = 1.2,
300300
constraint_start = 1.2,
301301
eltype = Float64,
302+
model_eltype = eltype,
302303
print_inner_model::Bool = false,
303304
cannot_unbridge::Bool = false,
304305
)
305306
# Load model and bridge it
306-
inner = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{eltype}())
307+
inner = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{model_eltype}())
307308
model = _bridged_model(Bridge{eltype}, inner)
308309
input_fn(model)
309310
final_touch(model)
@@ -313,7 +314,7 @@ function _runtests(
313314
print(inner)
314315
end
315316
Test.@testset "Test outer bridged model appears like the input" begin # COV_EXCL_LINE
316-
test = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{eltype}())
317+
test = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{model_eltype}())
317318
input_fn(test)
318319
_test_structural_identical(
319320
test,
@@ -322,7 +323,7 @@ function _runtests(
322323
)
323324
end
324325
Test.@testset "Test inner bridged model appears like the target" begin # COV_EXCL_LINE
325-
target = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{eltype}())
326+
target = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{model_eltype}())
326327
output_fn(target)
327328
_test_structural_identical(target, inner)
328329
end

src/Bridges/Constraint/bridges/AbstractFunctionConversionBridge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ function MOI.supports_constraint(
282282
::Type{G},
283283
::Type{<:MOI.AbstractSet},
284284
) where {T,F,G<:MOI.AbstractFunction}
285-
return !MOI.Utilities.is_complex(G) && isfinite(conversion_cost(F, G))
285+
return MOI.Utilities.is_coefficient_type(G, T) && isfinite(conversion_cost(F, G))
286286
end
287287

288288
function concrete_bridge_type(

src/Bridges/Constraint/bridges/InequalityToComplementsBridge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ function MOI.supports_constraint(
7171
::Type{F},
7272
::Type{<:Union{MOI.GreaterThan{T},MOI.LessThan{T},MOI.EqualTo{T}}},
7373
) where {T,F<:MOI.AbstractScalarFunction}
74-
return !MOI.Utilities.is_complex(F)
74+
return MOI.Utilities.is_coefficient_type(F, T)
7575
end
7676

7777
function MOI.Bridges.added_constrained_variable_types(

src/Bridges/Constraint/bridges/NormOneBridge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ function MOI.supports_constraint(
5656
::Type{F},
5757
::Type{MOI.NormOneCone},
5858
) where {T,F<:MOI.AbstractVectorFunction}
59-
return !MOI.Utilities.is_complex(F)
59+
return MOI.Utilities.is_coefficient_type(F, T)
6060
end
6161

6262
function MOI.Bridges.added_constrained_variable_types(::Type{<:NormOneBridge})

src/Bridges/Constraint/bridges/SetDotScalingBridge.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -193,11 +193,11 @@ end
193193
# Since the set type is not defined, the default `MOI.supports_constraint`
194194
# for `SetMapBridge` does not work
195195
function MOI.supports_constraint(
196-
::Type{<:SetDotScalingBridge},
196+
::Type{<:SetDotScalingBridge{T}},
197197
F::Type{<:MOI.AbstractVectorFunction},
198198
S::Type{<:MOI.AbstractVectorSet},
199-
)
200-
return !MOI.Utilities.is_complex(F) && MOI.is_set_dot_scaled(S)
199+
) where {T}
200+
return MOI.Utilities.is_coefficient_type(F, T) && MOI.is_set_dot_scaled(S)
201201
end
202202

203203
function MOI.supports_constraint(

src/Bridges/Constraint/bridges/VectorizeBridge.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ function MOI.supports_constraint(
6464
::Type{F},
6565
::Type{<:MOI.Utilities.ScalarLinearSet{T}},
6666
) where {T,F<:MOI.AbstractScalarFunction}
67-
return !MOI.Utilities.is_complex(F)
67+
return MOI.Utilities.is_coefficient_type(F, T)
6868
end
6969

7070
function MOI.Bridges.added_constrained_variable_types(::Type{<:VectorizeBridge})

src/Bridges/Constraint/set_map.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,15 @@ function MOI.supports_constraint(
5151
::Type{F},
5252
::Type{S1},
5353
) where {T,S1<:MOI.AbstractScalarSet,F<:MOI.AbstractScalarFunction}
54-
return MOI.Utilities.is_complex(F) == (T <: Complex)
54+
return MOI.Utilities.is_coefficient_type(F, T)
5555
end
5656

5757
function MOI.supports_constraint(
5858
::Type{<:MultiSetMapBridge{T,S1}},
5959
::Type{F},
6060
::Type{S1},
6161
) where {T,S1<:MOI.AbstractVectorSet,F<:MOI.AbstractVectorFunction}
62-
return MOI.Utilities.is_complex(F) == (T <: Complex)
62+
return MOI.Utilities.is_coefficient_type(F, T)
6363
end
6464

6565
function MOI.Bridges.added_constrained_variable_types(

test/Bridges/Constraint/SetDotScalingBridge.jl

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,33 @@ function test_inverse_scaling_quadratic()
111111
return
112112
end
113113

114+
function test_scaling_complex()
115+
MOI.Bridges.runtests(
116+
MOI.Bridges.Constraint.SetDotScalingBridge,
117+
model -> begin
118+
x, y, z = MOI.add_variables(model, 3)
119+
MOI.add_constraint(
120+
model,
121+
MOI.Utilities.vectorize([(1.0 + 0im) * x, (1.0 * im) * y, (1.0 + 0im) * z]),
122+
MOI.PositiveSemidefiniteConeTriangle(2),
123+
)
124+
end,
125+
model -> begin
126+
x, y, z = MOI.add_variables(model, 3)
127+
MOI.add_constraint(
128+
model,
129+
MOI.Utilities.vectorize([(1.0 + 0im) * x, (2 * im) * y, (1.0 + 0im) * z]),
130+
MOI.ScaledPositiveSemidefiniteConeTriangle(2),
131+
)
132+
end,
133+
eltype = ComplexF64,
134+
model_eltype = Float64,
135+
constraint_start = 1.2 * im
136+
)
137+
return
138+
end
139+
140+
114141
function test_set_dot_scaling_constraint_dual_start()
115142
inner = MOI.Utilities.UniversalFallback(MOI.Utilities.Model{Float64}())
116143
model = MOI.Bridges.Constraint.SetDotScaling{Float64}(inner)

test/Bridges/lazy_bridge_optimizer.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,6 +2253,15 @@ function test_issue_2696()
22532253
return
22542254
end
22552255

2256+
function test_wrong_coefficient()
2257+
model = MOI.instantiate(MOI.Utilities.Model{Float64}, with_bridge_type=Float64)
2258+
@test !MOI.supports_constraint(model, MOI.VectorAffineFunction{Int}, MOI.Nonnegatives)
2259+
@test !MOI.supports_constraint(model, MOI.VectorAffineFunction{Int}, MOI.PositiveSemidefiniteConeTriangle)
2260+
@test !MOI.supports_constraint(model, MOI.ScalarAffineFunction{Int}, MOI.EqualTo{Int})
2261+
@test !MOI.supports_constraint(model, MOI.VectorQuadraticFunction{Int}, MOI.Zeros)
2262+
return
2263+
end
2264+
22562265
end # module
22572266

22582267
TestBridgesLazyBridgeOptimizer.runtests()

0 commit comments

Comments
 (0)