From e6e33127c956bf9dbf532cbd4611410b3e7fa72a Mon Sep 17 00:00:00 2001 From: odow Date: Tue, 13 Jul 2021 13:44:58 +1200 Subject: [PATCH 1/4] Migrate constraints.jl to modular test --- test/Utilities/constraints.jl | 79 +++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 31 deletions(-) diff --git a/test/Utilities/constraints.jl b/test/Utilities/constraints.jl index ed44c7e61b..807ffa5a6b 100644 --- a/test/Utilities/constraints.jl +++ b/test/Utilities/constraints.jl @@ -1,37 +1,54 @@ +module TestConstraints + using Test import MathOptInterface const MOI = MathOptInterface -@testset "Scalar" begin - model = MOIU.Model{Float64}() - x = MOI.add_variable(model) - @testset "SingleVariable" begin - f = MOI.SingleVariable(x) - ci = MOIU.normalize_and_add_constraint( - model, - f, - MOI.EqualTo(1.0), - allow_modify_function = false, - ) - @test MOI.get(model, MOI.ConstraintFunction(), ci) == f - @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.EqualTo(1.0) - end - @testset "ScalarAffineFunction" begin - f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 2.0) - g = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0) - ci = MOIU.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) - @test f.constant == 2.0 - @test MOI.get(model, MOI.ConstraintFunction(), ci) ≈ g - @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.EqualTo(1.0) - ci = MOIU.normalize_and_add_constraint( - model, - f, - MOI.Interval(-1.0, 1.0), - allow_modify_function = true, - ) - @test f.constant == 0.0 - @test MOI.get(model, MOI.ConstraintFunction(), ci) ≈ g - @test MOI.get(model, MOI.ConstraintSet(), ci) == - MOI.Interval(-3.0, -1.0) +function runtests() + for name in names(@__MODULE__; all=true) + if startswith("$(name)", "test_") + @testset "$(name)" begin + getfield(@__MODULE__, name)() + end + end end + return +end + +function test_normalize_and_add_constrant_SingleVariable() + model = MOI.Utilities.Model{Float64}() + x = MOI.add_variable(model) + f = MOI.SingleVariable(x) + ci = MOIU.normalize_and_add_constraint( + model, + f, + MOI.EqualTo(1.0), + allow_modify_function = false, + ) + @test MOI.get(model, MOI.ConstraintFunction(), ci) == f + @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.EqualTo(1.0) + return +end + +function test_normalize_and_add_constrant_ScalarAffineFunction() + f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 2.0) + g = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0) + ci = MOIU.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) + @test f.constant == 2.0 + @test MOI.get(model, MOI.ConstraintFunction(), ci) ≈ g + @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.EqualTo(1.0) + ci = MOIU.normalize_and_add_constraint( + model, + f, + MOI.Interval(-1.0, 1.0), + allow_modify_function = true, + ) + @test f.constant == 0.0 + @test MOI.get(model, MOI.ConstraintFunction(), ci) ≈ g + @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.Interval(-3.0, -1.0) + return end + +end # module + +TestConstraints.runtests() From 16c4e1df7a1ce873fc0a940e587a08f13ddff0c1 Mon Sep 17 00:00:00 2001 From: odow Date: Tue, 13 Jul 2021 13:56:57 +1200 Subject: [PATCH 2/4] Fix formatting --- test/Utilities/constraints.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Utilities/constraints.jl b/test/Utilities/constraints.jl index 807ffa5a6b..d81b4c5362 100644 --- a/test/Utilities/constraints.jl +++ b/test/Utilities/constraints.jl @@ -5,7 +5,7 @@ import MathOptInterface const MOI = MathOptInterface function runtests() - for name in names(@__MODULE__; all=true) + for name in names(@__MODULE__; all = true) if startswith("$(name)", "test_") @testset "$(name)" begin getfield(@__MODULE__, name)() From f1904ec9c452dce9bd4768ea135845b11b6d2c18 Mon Sep 17 00:00:00 2001 From: Oscar Dowson Date: Tue, 13 Jul 2021 14:49:14 +1200 Subject: [PATCH 3/4] Update constraints.jl --- test/Utilities/constraints.jl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Utilities/constraints.jl b/test/Utilities/constraints.jl index d81b4c5362..d608467674 100644 --- a/test/Utilities/constraints.jl +++ b/test/Utilities/constraints.jl @@ -19,7 +19,7 @@ function test_normalize_and_add_constrant_SingleVariable() model = MOI.Utilities.Model{Float64}() x = MOI.add_variable(model) f = MOI.SingleVariable(x) - ci = MOIU.normalize_and_add_constraint( + ci = MOI.Utilities.normalize_and_add_constraint( model, f, MOI.EqualTo(1.0), @@ -33,11 +33,11 @@ end function test_normalize_and_add_constrant_ScalarAffineFunction() f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 2.0) g = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0) - ci = MOIU.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) + ci = MOI.Utilities.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) @test f.constant == 2.0 @test MOI.get(model, MOI.ConstraintFunction(), ci) ≈ g @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.EqualTo(1.0) - ci = MOIU.normalize_and_add_constraint( + ci = MOI.Utilities.normalize_and_add_constraint( model, f, MOI.Interval(-1.0, 1.0), From 17097db001e689ed4cb30a53fe623da74aa15776 Mon Sep 17 00:00:00 2001 From: odow Date: Tue, 13 Jul 2021 15:16:53 +1200 Subject: [PATCH 4/4] Fixes --- src/Utilities/constraints.jl | 30 ++++++++++++++++-------------- test/Utilities/constraints.jl | 8 +++++--- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/Utilities/constraints.jl b/src/Utilities/constraints.jl index f20936c31b..eed872458f 100644 --- a/src/Utilities/constraints.jl +++ b/src/Utilities/constraints.jl @@ -1,15 +1,15 @@ """ - normalize_and_add_constraint(model::MOI.ModelLike, - func::MOI.AbstractScalarFunction, - set::MOI.AbstractScalarSet; - allow_modify_function::Bool=false) + normalize_and_add_constraint( + model::MOI.ModelLike, + func::MOI.AbstractScalarFunction, + set::MOI.AbstractScalarSet; + allow_modify_function::Bool = false, + ) -Adds the scalar constraint obtained by moving the constant term in `func` to -the set in `model`. If `allow_modify_function` is `true` then the function -`func` can be modified. +Adds the scalar constraint obtained by moving the constant term in `func` to the +set in `model`. If `allow_modify_function` is `true` then the function `func` +can be modified. """ -function normalize_and_add_constraint end - function normalize_and_add_constraint( model::MOI.ModelLike, func::MOI.AbstractScalarFunction, @@ -27,13 +27,14 @@ function normalize_and_add_constraint( end """ - normalize_constant(func::MOI.AbstractScalarFunction, - set::MOI.AbstractScalarSet; - allow_modify_function::Bool=false) + normalize_constant( + func::MOI.AbstractScalarFunction, + set::MOI.AbstractScalarSet; + allow_modify_function::Bool = false, + ) Return the `func`-in-`set` constraint in normalized form. That is, if `func` is -[`MOI.ScalarQuadraticFunction`](@ref) or -[`MOI.ScalarAffineFunction`](@ref), the +[`MOI.ScalarQuadraticFunction`](@ref) or [`MOI.ScalarAffineFunction`](@ref), the constant is moved to the set. If `allow_modify_function` is `true` then the function `func` can be modified. """ @@ -44,6 +45,7 @@ function normalize_constant( ) return func, set end + function normalize_constant( func::Union{MOI.ScalarAffineFunction{T},MOI.ScalarQuadraticFunction{T}}, set::MOI.AbstractScalarSet; diff --git a/test/Utilities/constraints.jl b/test/Utilities/constraints.jl index d81b4c5362..317a34ab4a 100644 --- a/test/Utilities/constraints.jl +++ b/test/Utilities/constraints.jl @@ -19,7 +19,7 @@ function test_normalize_and_add_constrant_SingleVariable() model = MOI.Utilities.Model{Float64}() x = MOI.add_variable(model) f = MOI.SingleVariable(x) - ci = MOIU.normalize_and_add_constraint( + ci = MOI.Utilities.normalize_and_add_constraint( model, f, MOI.EqualTo(1.0), @@ -31,13 +31,15 @@ function test_normalize_and_add_constrant_SingleVariable() end function test_normalize_and_add_constrant_ScalarAffineFunction() + model = MOI.Utilities.Model{Float64}() + x = MOI.add_variable(model) f = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 2.0) g = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0) - ci = MOIU.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) + ci = MOI.Utilities.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) @test f.constant == 2.0 @test MOI.get(model, MOI.ConstraintFunction(), ci) ≈ g @test MOI.get(model, MOI.ConstraintSet(), ci) == MOI.EqualTo(1.0) - ci = MOIU.normalize_and_add_constraint( + ci = MOI.Utilities.normalize_and_add_constraint( model, f, MOI.Interval(-1.0, 1.0),