diff --git a/src/Test/test_model.jl b/src/Test/test_model.jl index a6936e635b..520b295035 100644 --- a/src/Test/test_model.jl +++ b/src/Test/test_model.jl @@ -10,6 +10,7 @@ MOI.constant(set::UnknownScalarSet) = set.constant Base.copy(set::UnknownScalarSet) = UnknownScalarSet(copy(MOI.constant(set))) +MOIU.supports_shift_constant(::Type{<:UnknownScalarSet}) = true function MOIU.shift_constant(set::UnknownScalarSet, offset) return UnknownScalarSet(MOI.constant(set) + offset) end diff --git a/src/Utilities/constraints.jl b/src/Utilities/constraints.jl index eed872458f..2f665135bd 100644 --- a/src/Utilities/constraints.jl +++ b/src/Utilities/constraints.jl @@ -51,10 +51,12 @@ function normalize_constant( set::MOI.AbstractScalarSet; allow_modify_function::Bool = false, ) where {T} - set = shift_constant(set, -func.constant) - if !allow_modify_function - func = copy(func) + if supports_shift_constant(typeof(set)) + set = shift_constant(set, -func.constant) + if !allow_modify_function + func = copy(func) + end + func.constant = zero(T) end - func.constant = zero(T) return func, set end diff --git a/test/Utilities/constraints.jl b/test/Utilities/constraints.jl index fbc5fce73b..188d3d35b6 100644 --- a/test/Utilities/constraints.jl +++ b/test/Utilities/constraints.jl @@ -33,6 +33,10 @@ 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) + int = MOI.Utilities.normalize_and_add_constraint(model, f, MOI.Integer()) + @test f.constant == 2.0 + @test MOI.get(model, MOI.ConstraintFunction(), int) ≈ f + @test MOI.get(model, MOI.ConstraintSet(), int) == MOI.Integer() g = MOI.ScalarAffineFunction([MOI.ScalarAffineTerm(1.0, x)], 0.0) ci = MOI.Utilities.normalize_and_add_constraint(model, f, MOI.EqualTo(3.0)) @test f.constant == 2.0