diff --git a/src/Test/test_model.jl b/src/Test/test_model.jl index 4fa013deb4..9f992f4a62 100644 --- a/src/Test/test_model.jl +++ b/src/Test/test_model.jl @@ -802,17 +802,16 @@ function test_model_LowerBoundAlreadySet( sets = [MOI.EqualTo(lb), MOI.Interval(lb, lb)] set2 = MOI.GreaterThan(lb) for set1 in sets - if !MOI.supports_constraint(model, MOI.VariableIndex, typeof(set1)) - continue + if MOI.supports_constraint(model, MOI.VariableIndex, typeof(set1)) + ci = MOI.add_constraint(model, x, set1) + err = MOI.LowerBoundAlreadySet{typeof(set1),typeof(set2)}(x) + @test_throws err MOI.add_constraint(model, x, set2) + MOI.delete(model, ci) + ci = MOI.add_constraint(model, x, set2) + err = MOI.LowerBoundAlreadySet{typeof(set2),typeof(set1)}(x) + @test_throws err MOI.add_constraint(model, x, set1) + MOI.delete(model, ci) end - ci = MOI.add_constraint(model, x, set1) - err = MOI.LowerBoundAlreadySet{typeof(set1),typeof(set2)}(x) - @test_throws err MOI.add_constraint(model, x, set2) - MOI.delete(model, ci) - ci = MOI.add_constraint(model, x, set2) - err = MOI.LowerBoundAlreadySet{typeof(set2),typeof(set1)}(x) - @test_throws err MOI.add_constraint(model, x, set1) - MOI.delete(model, ci) end return end @@ -836,17 +835,16 @@ function test_model_UpperBoundAlreadySet( sets = [MOI.EqualTo(ub), MOI.Interval(ub, ub)] set2 = MOI.LessThan(ub) for set1 in sets - if !MOI.supports_constraint(model, MOI.VariableIndex, typeof(set1)) - continue + if MOI.supports_constraint(model, MOI.VariableIndex, typeof(set1)) + ci = MOI.add_constraint(model, x, set1) + err = MOI.UpperBoundAlreadySet{typeof(set1),typeof(set2)}(x) + @test_throws err MOI.add_constraint(model, x, set2) + MOI.delete(model, ci) + ci = MOI.add_constraint(model, x, set2) + err = MOI.UpperBoundAlreadySet{typeof(set2),typeof(set1)}(x) + @test_throws err MOI.add_constraint(model, x, set1) + MOI.delete(model, ci) end - ci = MOI.add_constraint(model, x, set1) - err = MOI.UpperBoundAlreadySet{typeof(set1),typeof(set2)}(x) - @test_throws err MOI.add_constraint(model, x, set2) - MOI.delete(model, ci) - ci = MOI.add_constraint(model, x, set2) - err = MOI.UpperBoundAlreadySet{typeof(set2),typeof(set1)}(x) - @test_throws err MOI.add_constraint(model, x, set1) - MOI.delete(model, ci) end return end diff --git a/src/Test/test_solve.jl b/src/Test/test_solve.jl index cbd18faec4..281631ecc4 100644 --- a/src/Test/test_solve.jl +++ b/src/Test/test_solve.jl @@ -437,9 +437,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_upper( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] > config.atol @@ -491,9 +489,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_EqualTo_lower( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] > config.atol @@ -544,9 +540,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_LessThan( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] > config.atol @@ -598,9 +592,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_GreaterThan( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] > config.atol @@ -652,9 +644,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_upper( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] > config.atol @@ -706,9 +696,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_Interval_lower( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] > config.atol @@ -760,9 +748,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan( ) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] < -config.atol @@ -818,9 +804,7 @@ function test_solve_DualStatus_INFEASIBILITY_CERTIFICATE_VariableIndex_LessThan_ MOI.set(model, MOI.ObjectiveFunction{MOI.VariableIndex}(), x[1]) MOI.optimize!(model) @test MOI.get(model, MOI.TerminationStatus()) == config.infeasible_status - if MOI.get(model, MOI.DualStatus()) != MOI.INFEASIBILITY_CERTIFICATE - return - end + @requires MOI.get(model, MOI.DualStatus()) == MOI.INFEASIBILITY_CERTIFICATE clb_dual = MOI.get.(model, MOI.ConstraintDual(), clb) c_dual = MOI.get(model, MOI.ConstraintDual(), c) @test clb_dual[1] < -config.atol diff --git a/test/Utilities/mockoptimizer.jl b/test/Utilities/mockoptimizer.jl index 0c1f0f2848..c7f76b8cc2 100644 --- a/test/Utilities/mockoptimizer.jl +++ b/test/Utilities/mockoptimizer.jl @@ -241,6 +241,23 @@ function test_delete_allowed_false() return end +function test_modify_not_allowed() + model = MOI.Utilities.MockOptimizer(MOI.Utilities.Model{Float64}()) + config = MOI.Test.Config( + exclude = Any[MOI.ScalarCoefficientChange, MOI.VectorConstantChange], + ) + MOI.Test.runtests( + model, + config, + include = [ + r"$test_linear_integration^", + r"$test_linear_integration_modification^", + r"$test_linear_VectorAffineFunction^", + ], + ) + return +end + end # module TestMockOptimizer.runtests()