From 637e4c2975f0fca64073bd32b26edb5efd1f0862 Mon Sep 17 00:00:00 2001 From: odow Date: Wed, 31 Jan 2024 15:07:37 +1300 Subject: [PATCH] Add support for MOI.EqualTo{Bool} --- src/MiniZinc.jl | 2 +- test/runtests.jl | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/MiniZinc.jl b/src/MiniZinc.jl index 506d830..625fa04 100644 --- a/src/MiniZinc.jl +++ b/src/MiniZinc.jl @@ -17,7 +17,7 @@ const ReifiedTable{T} = MOI.Reified{MOI.Table{T}} MOI.Utilities.@model( Model, - (MOI.ZeroOne, MOI.Integer), + (MOI.ZeroOne, MOI.Integer, MOI.EqualTo{Bool}), (MOI.EqualTo, MOI.GreaterThan, MOI.LessThan, MOI.Interval), ( MOI.AllDifferent, diff --git a/test/runtests.jl b/test/runtests.jl index 9cac94f..f839e34 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -969,6 +969,42 @@ function test_write_circuit() return end +function test_write_bool_true() + model = MiniZinc.Model{Bool}() + x = MOI.add_variables(model, 2) + MOI.set(model, MOI.VariableName(), x, ["x1", "x2"]) + MOI.add_constraint( + model, + MOI.ScalarNonlinearFunction(:||, Any[x[1], x[2]]), + MOI.EqualTo{Bool}(true), + ) + @test sprint(write, model) == """ + var bool: x1; + var bool: x2; + constraint (x1 \\/ x2) = true; + solve satisfy; + """ + return +end + +function test_write_bool_false() + model = MiniZinc.Model{Bool}() + x = MOI.add_variables(model, 2) + MOI.set(model, MOI.VariableName(), x, ["x1", "x2"]) + MOI.add_constraint( + model, + MOI.ScalarNonlinearFunction(:&&, Any[x[1], x[2]]), + MOI.EqualTo{Bool}(false), + ) + @test sprint(write, model) == """ + var bool: x1; + var bool: x2; + constraint (x1 /\\ x2) = false; + solve satisfy; + """ + return +end + function _test_chuffed_asset(file, args...) filename = joinpath(@__DIR__, "assets", file) ret = MiniZinc.run_flatzinc(Chuffed_jll.fznchuffed, filename, args...)