diff --git a/src/Test/modellike.jl b/src/Test/modellike.jl index 239259349c..bfe450e4f3 100644 --- a/src/Test/modellike.jl +++ b/src/Test/modellike.jl @@ -1,6 +1,7 @@ # TODO: Move generic model tests from MOIU to here -struct UnknownSet <: MOI.AbstractSet end +struct UnknownScalarSet <: MOI.AbstractScalarSet end +struct UnknownVectorSet <: MOI.AbstractVectorSet end function nametest(model::MOI.ModelLike) @testset "Name test" begin @@ -145,9 +146,9 @@ MOI.get(::BadModel, ::MOI.ConstraintSet, ::MOI.ConstraintIndex{MOI.SingleVariabl MOI.get(::BadModel, ::MOI.ListOfConstraintAttributesSet) = MOI.AbstractConstraintAttribute[] struct BadConstraintModel <: BadModel end -MOI.get(::BadConstraintModel, ::MOI.ListOfConstraints) = [(MOI.SingleVariable, MOI.EqualTo{Float64}), (MOI.SingleVariable, UnknownSet)] -MOI.get(::BadModel, ::MOI.ConstraintFunction, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownSet}) = MOI.SingleVariable(MOI.VariableIndex(1)) -MOI.get(::BadModel, ::MOI.ConstraintSet, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownSet}) = UnknownSet() +MOI.get(::BadConstraintModel, ::MOI.ListOfConstraints) = [(MOI.SingleVariable, MOI.EqualTo{Float64}), (MOI.SingleVariable, UnknownScalarSet)] +MOI.get(::BadModel, ::MOI.ConstraintFunction, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownScalarSet}) = MOI.SingleVariable(MOI.VariableIndex(1)) +MOI.get(::BadModel, ::MOI.ConstraintSet, ::MOI.ConstraintIndex{MOI.SingleVariable,UnknownScalarSet}) = UnknownScalarSet() struct UnknownModelAttribute <: MOI.AbstractModelAttribute end struct BadModelAttributeModel <: BadModel end @@ -165,7 +166,7 @@ MOI.get(::BadConstraintAttributeModel, ::UnknownConstraintAttribute, ::MOI.Const MOI.get(::BadConstraintAttributeModel, ::MOI.ListOfConstraintAttributesSet) = MOI.AbstractConstraintAttribute[UnknownConstraintAttribute()] function failcopytestc(dest::MOI.ModelLike) - @test !MOI.supports_constraint(dest, MOI.SingleVariable, UnknownSet) + @test !MOI.supports_constraint(dest, MOI.SingleVariable, UnknownScalarSet) @test_throws MOI.UnsupportedConstraint MOI.copy_to(dest, BadConstraintModel()) end function failcopytestia(dest::MOI.ModelLike) @@ -253,7 +254,7 @@ function supports_constrainttest(model::MOI.ModelLike, ::Type{GoodT}, ::Type{Bad @test MOI.supports_constraint(model, MOI.VectorOfVariables, MOI.Zeros) @test !MOI.supports_constraint(model, MOI.VectorOfVariables, MOI.EqualTo{GoodT}) # vector in scalar @test !MOI.supports_constraint(model, MOI.SingleVariable, MOI.Zeros) # scalar in vector - @test !MOI.supports_constraint(model, MOI.VectorOfVariables, UnknownSet) # set not supported + @test !MOI.supports_constraint(model, MOI.VectorOfVariables, UnknownVectorSet) # set not supported end """ diff --git a/test/Test/modellike.jl b/test/Test/modellike.jl new file mode 100644 index 0000000000..561483a797 --- /dev/null +++ b/test/Test/modellike.jl @@ -0,0 +1,7 @@ +@testset "ModelLike" begin + model = DummyModelWithAdd() + MOIT.failcopytestc(model) + MOIT.failcopytestia(model) + MOIT.failcopytestva(model) + MOIT.failcopytestca(model) +end diff --git a/test/dummy.jl b/test/dummy.jl index 8a980f1366..e9b6081306 100644 --- a/test/dummy.jl +++ b/test/dummy.jl @@ -1,9 +1,25 @@ -struct DummyModel <: MOI.ModelLike +abstract type AbstractDummyModel <: MOI.ModelLike end + +function MOI.empty!(::AbstractDummyModel) end +function MOI.copy_to(dest::AbstractDummyModel, src::MOI.ModelLike; copy_names=true) + return MOIU.default_copy_to(dest, src, copy_names) end -MOI.supports(::DummyModel, ::MOI.ObjectiveSense) = true -MOI.supports(::DummyModel, ::MOI.ConstraintPrimalStart, +MOI.supports(::AbstractDummyModel, ::MOI.ObjectiveSense) = true +MOI.supports(::AbstractDummyModel, ::MOI.ConstraintPrimalStart, ::Type{<:MOI.ConstraintIndex}) = true -MOI.supports_constraint(::DummyModel, ::Type{MOI.SingleVariable}, +MOI.supports_constraint(::AbstractDummyModel, ::Type{MOI.SingleVariable}, ::Type{MOI.EqualTo{Float64}}) = true -MOI.supports_constraint(::DummyModel, ::Type{MOI.VectorOfVariables}, +MOI.supports_constraint(::AbstractDummyModel, ::Type{MOI.VectorOfVariables}, ::Type{MOI.Zeros}) = true + +struct DummyModel <: AbstractDummyModel +end + +# Implements add_variable and add_constraint +struct DummyModelWithAdd <: AbstractDummyModel +end +MOI.add_variable(::DummyModelWithAdd) = MOI.VariableIndex(0) +function MOI.add_constraint(::DummyModelWithAdd, ::MOI.SingleVariable, + ::MOI.EqualTo{Float64}) + return MOI.ConstraintIndex{MOI.SingleVariable, MOI.EqualTo{Float64}}(0) +end