Skip to content

Commit 1204c43

Browse files
authored
Fix convert_approx with multiple nonzero terms (#1152)
1 parent 042167d commit 1204c43

2 files changed

Lines changed: 7 additions & 5 deletions

File tree

src/Utilities/functions.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1975,7 +1975,7 @@ function convert_approx(::Type{MOI.SingleVariable}, func::MOI.ScalarAffineFuncti
19751975
f = canonical(func)
19761976
i = findfirst(t -> isapprox(t.coefficient, one(T), atol=tol), f.terms)
19771977
if abs(f.constant) > tol || i === nothing ||
1978-
any(j -> j != i && abs(f.terms[i]) > tol, eachindex(f.terms))
1978+
any(j -> j != i && abs(f.terms[j].coefficient) > tol, eachindex(f.terms))
19791979
throw(InexactError(:convert_approx, MOI.SingleVariable, func))
19801980
end
19811981
return MOI.SingleVariable(f.terms[i].variable_index)

test/Utilities/functions.jl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,16 +308,18 @@ end
308308
@test f.terms == MOI.ScalarAffineTerm.([2, 4], [x, y])
309309
@test f.constant == 5
310310
end
311-
f = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([2, 4], [x, y]),
312-
5)
311+
f = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0, 0.5], [x, y]), 0.5)
313312
@testset "convert" begin
314313
@test_throws InexactError convert(MOI.SingleVariable, f)
314+
@test_throws InexactError MOIU.convert_approx(MOI.SingleVariable, f)
315+
@test MOIU.convert_approx(MOI.SingleVariable, f, tol = 0.5) == MOI.SingleVariable(x)
315316
quad_f = MOI.ScalarQuadraticFunction(f.terms,
316-
MOI.ScalarQuadraticTerm{Int}[],
317+
MOI.ScalarQuadraticTerm{Float64}[],
317318
f.constant)
318-
@test convert(MOI.ScalarQuadraticFunction{Int}, f) quad_f
319+
@test convert(MOI.ScalarQuadraticFunction{Float64}, f) quad_f
319320
g = convert(MOI.ScalarAffineFunction{Float64}, MOI.SingleVariable(x))
320321
@test convert(MOI.SingleVariable, g) == MOI.SingleVariable(x)
322+
@test MOIU.convert_approx(MOI.SingleVariable, g) == MOI.SingleVariable(x)
321323
end
322324
@testset "operate with Float64 coefficient type" begin
323325
f = MOI.ScalarAffineFunction(MOI.ScalarAffineTerm.([1.0, 4.0],

0 commit comments

Comments
 (0)