Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/Test/UnitTests/attributes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,27 @@ function solver_name(model::MOI.ModelLike, config::TestConfig)
end
unittests["solver_name"] = solver_name

"""
silent(model::MOI.ModelLike, config::TestConfig)

Test that the [`MOI.Silent`](@ref) attribute is implemented for `model`.
"""
function silent(model::MOI.ModelLike, config::TestConfig)
if config.solve
@test MOI.supports(model, MOI.Silent())
# Get the current value to restore it at the end of the test
value = MOI.get(model, MOI.Silent())
MOI.set(model, MOI.Silent(), !value)
@test !value == MOI.get(model, MOI.Silent())
# Check that `set` does not just take `!` of the current value
MOI.set(model, MOI.Silent(), !value)
@test !value == MOI.get(model, MOI.Silent())
MOI.set(model, MOI.Silent(), value)
@test value == MOI.get(model, MOI.Silent())
end
end
unittests["silent"] = silent

"""
raw_status_string(model::MOI.ModelLike, config::TestConfig)

Expand Down
9 changes: 8 additions & 1 deletion src/Utilities/mockoptimizer.jl
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,9 @@ MOI.set(mock::MockOptimizer, ::MOI.DualObjectiveValue, value::Real) = (mock.dual
MOI.set(mock::MockOptimizer, ::MOI.PrimalStatus, value::MOI.ResultStatusCode) = (mock.primalstatus = value)
MOI.set(mock::MockOptimizer, ::MOI.DualStatus, value::MOI.ResultStatusCode) = (mock.dualstatus = value)
MOI.set(mock::MockOptimizer, ::MockModelAttribute, value::Integer) = (mock.attribute = value)
function MOI.supports(mock::MockOptimizer, attr::MOI.AbstractModelAttribute)
function MOI.supports(mock::MockOptimizer, attr::MOI.AbstractOptimizerAttribute)
# `supports` is not defined if `is_set_by_optimize(attr)` so we pass it to
# `mock.inner_model`.
return MOI.supports(mock.inner_model, attr)
end
function MOI.set(mock::MockOptimizer, attr::MOI.AbstractOptimizerAttribute,
Expand All @@ -167,6 +169,11 @@ function MOI.set(mock::MockOptimizer, attr::MOI.AbstractOptimizerAttribute,
MOI.set(mock.inner_model, attr, value)
end
end
function MOI.supports(mock::MockOptimizer, attr::MOI.AbstractModelAttribute)
# `supports` is not defined if `is_set_by_optimize(attr)` so we pass it to
# `mock.inner_model`.
return MOI.supports(mock.inner_model, attr)
end
function MOI.set(mock::MockOptimizer, attr::MOI.AbstractModelAttribute, value)
if MOI.is_set_by_optimize(attr)
mock.model_attributes[attr] = value
Expand Down
4 changes: 1 addition & 3 deletions src/Utilities/universalfallback.jl
Original file line number Diff line number Diff line change
Expand Up @@ -36,16 +36,14 @@ UniversalFallback(model::MOI.ModelLike) = UniversalFallback{typeof(model)}(model

function MOI.is_empty(uf::UniversalFallback)
return MOI.is_empty(uf.model) && isempty(uf.constraints) &&
isempty(uf.optattr) && isempty(uf.modattr) && isempty(uf.varattr) &&
isempty(uf.conattr)
isempty(uf.modattr) && isempty(uf.varattr) && isempty(uf.conattr)
end
function MOI.empty!(uf::UniversalFallback)
MOI.empty!(uf.model)
empty!(uf.constraints)
uf.nextconstraintid = 0
empty!(uf.con_to_name)
uf.name_to_con = nothing
empty!(uf.optattr)
empty!(uf.modattr)
empty!(uf.varattr)
empty!(uf.conattr)
Expand Down
1 change: 1 addition & 0 deletions test/Test/unit.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ end
@testset "Unit Tests" begin
# `UniversalFallback` needed for `MOI.Silent`
mock = MOIU.MockOptimizer(MOIU.UniversalFallback(Model{Float64}()))
MOI.set(mock, MOI.Silent(), true)
config = MOIT.TestConfig()
MOIT.unittest(mock, config, [
"solve_blank_obj",
Expand Down
6 changes: 3 additions & 3 deletions test/Utilities/universalfallback.jl
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ function test_optmodattrs(uf, model, attr, listattr)
MOI.set(uf, attr, 0)
@test MOI.get(uf, attr) == 0
@test MOI.get(uf, listattr) == [attr]
@test !MOI.is_empty(uf)
MOI.empty!(uf)
@test MOI.is_empty(uf)
end
function test_varconattrs(uf, model, attr, listattr, I::Type{<:MOI.Index},
addfun, x, y, z)
Expand Down Expand Up @@ -116,6 +113,9 @@ end
attr = MOIT.UnknownModelAttribute()
listattr = MOI.ListOfModelAttributesSet()
test_optmodattrs(uf, model, attr, listattr)
@test !MOI.is_empty(uf)
MOI.empty!(uf)
@test MOI.is_empty(uf)
end
x = MOI.add_variable(uf)
y, z = MOI.add_variables(uf, 2)
Expand Down