Skip to content

Commit c7bd022

Browse files
authored
Merge pull request #543 from JuliaOpt/bl/unknownset
🐛 Fix error with UnknownSet
2 parents f8d9c07 + 8e59d3a commit c7bd022

File tree

3 files changed

+35
-11
lines changed

3 files changed

+35
-11
lines changed

src/Test/modellike.jl

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# TODO: Move generic model tests from MOIU to here
22

3-
struct UnknownSet <: MOI.AbstractSet end
3+
struct UnknownScalarSet <: MOI.AbstractScalarSet end
4+
struct UnknownVectorSet <: MOI.AbstractVectorSet end
45

56
function nametest(model::MOI.ModelLike)
67
@testset "Name test" begin
@@ -145,9 +146,9 @@ MOI.get(::BadModel, ::MOI.ConstraintSet, ::MOI.ConstraintIndex{MOI.SingleVariabl
145146
MOI.get(::BadModel, ::MOI.ListOfConstraintAttributesSet) = MOI.AbstractConstraintAttribute[]
146147

147148
struct BadConstraintModel <: BadModel end
148-
MOI.get(::BadConstraintModel, ::MOI.ListOfConstraints) = [(MOI.SingleVariable, MOI.EqualTo{Float64}), (MOI.SingleVariable, UnknownSet)]
149-
MOI.get(::BadModel, ::MOI.ConstraintFunction, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownSet}) = MOI.SingleVariable(MOI.VariableIndex(1))
150-
MOI.get(::BadModel, ::MOI.ConstraintSet, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownSet}) = UnknownSet()
149+
MOI.get(::BadConstraintModel, ::MOI.ListOfConstraints) = [(MOI.SingleVariable, MOI.EqualTo{Float64}), (MOI.SingleVariable, UnknownScalarSet)]
150+
MOI.get(::BadModel, ::MOI.ConstraintFunction, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownScalarSet}) = MOI.SingleVariable(MOI.VariableIndex(1))
151+
MOI.get(::BadModel, ::MOI.ConstraintSet, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownScalarSet}) = UnknownScalarSet()
151152

152153
struct UnknownModelAttribute <: MOI.AbstractModelAttribute end
153154
struct BadModelAttributeModel <: BadModel end
@@ -165,7 +166,7 @@ MOI.get(::BadConstraintAttributeModel, ::UnknownConstraintAttribute, ::MOI.Const
165166
MOI.get(::BadConstraintAttributeModel, ::MOI.ListOfConstraintAttributesSet) = MOI.AbstractConstraintAttribute[UnknownConstraintAttribute()]
166167

167168
function failcopytestc(dest::MOI.ModelLike)
168-
@test !MOI.supports_constraint(dest, MOI.SingleVariable, UnknownSet)
169+
@test !MOI.supports_constraint(dest, MOI.SingleVariable, UnknownScalarSet)
169170
@test_throws MOI.UnsupportedConstraint MOI.copy_to(dest, BadConstraintModel())
170171
end
171172
function failcopytestia(dest::MOI.ModelLike)
@@ -253,7 +254,7 @@ function supports_constrainttest(model::MOI.ModelLike, ::Type{GoodT}, ::Type{Bad
253254
@test MOI.supports_constraint(model, MOI.VectorOfVariables, MOI.Zeros)
254255
@test !MOI.supports_constraint(model, MOI.VectorOfVariables, MOI.EqualTo{GoodT}) # vector in scalar
255256
@test !MOI.supports_constraint(model, MOI.SingleVariable, MOI.Zeros) # scalar in vector
256-
@test !MOI.supports_constraint(model, MOI.VectorOfVariables, UnknownSet) # set not supported
257+
@test !MOI.supports_constraint(model, MOI.VectorOfVariables, UnknownVectorSet) # set not supported
257258
end
258259

259260
"""

test/Test/modellike.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
@testset "ModelLike" begin
2+
model = DummyModelWithAdd()
3+
MOIT.failcopytestc(model)
4+
MOIT.failcopytestia(model)
5+
MOIT.failcopytestva(model)
6+
MOIT.failcopytestca(model)
7+
end

test/dummy.jl

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,25 @@
1-
struct DummyModel <: MOI.ModelLike
1+
abstract type AbstractDummyModel <: MOI.ModelLike end
2+
3+
function MOI.empty!(::AbstractDummyModel) end
4+
function MOI.copy_to(dest::AbstractDummyModel, src::MOI.ModelLike; copy_names=true)
5+
return MOIU.default_copy_to(dest, src, copy_names)
26
end
3-
MOI.supports(::DummyModel, ::MOI.ObjectiveSense) = true
4-
MOI.supports(::DummyModel, ::MOI.ConstraintPrimalStart,
7+
MOI.supports(::AbstractDummyModel, ::MOI.ObjectiveSense) = true
8+
MOI.supports(::AbstractDummyModel, ::MOI.ConstraintPrimalStart,
59
::Type{<:MOI.ConstraintIndex}) = true
6-
MOI.supports_constraint(::DummyModel, ::Type{MOI.SingleVariable},
10+
MOI.supports_constraint(::AbstractDummyModel, ::Type{MOI.SingleVariable},
711
::Type{MOI.EqualTo{Float64}}) = true
8-
MOI.supports_constraint(::DummyModel, ::Type{MOI.VectorOfVariables},
12+
MOI.supports_constraint(::AbstractDummyModel, ::Type{MOI.VectorOfVariables},
913
::Type{MOI.Zeros}) = true
14+
15+
struct DummyModel <: AbstractDummyModel
16+
end
17+
18+
# Implements add_variable and add_constraint
19+
struct DummyModelWithAdd <: AbstractDummyModel
20+
end
21+
MOI.add_variable(::DummyModelWithAdd) = MOI.VariableIndex(0)
22+
function MOI.add_constraint(::DummyModelWithAdd, ::MOI.SingleVariable,
23+
::MOI.EqualTo{Float64})
24+
return MOI.ConstraintIndex{MOI.SingleVariable, MOI.EqualTo{Float64}}(0)
25+
end

0 commit comments

Comments
 (0)