From a1af547ae07a91c3be85d35e5a4f306ffc2f1ac9 Mon Sep 17 00:00:00 2001 From: odow Date: Thu, 4 Jan 2024 14:31:10 +1300 Subject: [PATCH] Fix converting 0-valued Scalar(Affine,Quadratic)Function to Nonlinear --- src/functions.jl | 4 ++-- test/functions.jl | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/functions.jl b/src/functions.jl index a22fc2aff0..4cf7348002 100644 --- a/src/functions.jl +++ b/src/functions.jl @@ -1215,7 +1215,7 @@ end function Base.convert(F::Type{ScalarNonlinearFunction}, f::ScalarAffineFunction) args = Any[convert(ScalarNonlinearFunction, term) for term in f.terms] - if !iszero(f.constant) + if isempty(args) || !iszero(f.constant) push!(args, f.constant) end return ScalarNonlinearFunction(:+, args) @@ -1243,7 +1243,7 @@ function Base.convert( for term in f.affine_terms push!(args, convert(F, term)) end - if !iszero(f.constant) + if isempty(args) || !iszero(f.constant) push!(args, f.constant) end return ScalarNonlinearFunction(:+, args) diff --git a/test/functions.jl b/test/functions.jl index 0d3ac1693e..503dc50da5 100644 --- a/test/functions.jl +++ b/test/functions.jl @@ -363,6 +363,20 @@ function test_convert_ScalarNonlinearFunction_ScalarAffineFunction() return end +function test_convert_ScalarNonlinearFunction_zero() + affine_terms = MOI.ScalarAffineTerm{Float64}[] + quad_terms = MOI.ScalarQuadraticTerm{Float64}[] + for f in ( + MOI.ScalarAffineFunction(affine_terms, 0.0), + MOI.ScalarQuadraticFunction(quad_terms, affine_terms, 0.0), + ) + g = convert(MOI.ScalarNonlinearFunction, f) + @test g.head == :+ + @test g.args == Any[0.0] + end + return +end + function test_convert_ScalarNonlinearFunction_ScalarQuadraticTerm() x = MOI.VariableIndex(1) y = MOI.VariableIndex(2)