From 2c65dcea6de2e5afc10c062159c5997ce8910009 Mon Sep 17 00:00:00 2001 From: cprudhom Date: Thu, 16 May 2024 11:24:01 +0200 Subject: [PATCH] Fix #1095 --- .../solver/constraints/ImpliedConstraint.java | 3 +-- .../constraints/ReificationConstraint.java | 3 +-- .../constraints/nary/SubcircuitTest.java | 22 +++++++++++++++++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/solver/src/main/java/org/chocosolver/solver/constraints/ImpliedConstraint.java b/solver/src/main/java/org/chocosolver/solver/constraints/ImpliedConstraint.java index 2a950c9cfd..32e9a7fd36 100644 --- a/solver/src/main/java/org/chocosolver/solver/constraints/ImpliedConstraint.java +++ b/solver/src/main/java/org/chocosolver/solver/constraints/ImpliedConstraint.java @@ -14,7 +14,6 @@ import org.chocosolver.solver.exception.ContradictionException; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.Variable; -import org.chocosolver.solver.variables.events.PropagatorEventType; import org.chocosolver.util.ESat; import org.chocosolver.util.tools.ArrayUtils; @@ -97,7 +96,7 @@ public void activate(int idx) throws ContradictionException { for (int p = indices[idx]; p < indices[idx + 1]; p++) { assert (propagators[p].isReifiedAndSilent()); propagators[p].setReifiedTrue(); - propagators[p].propagate(PropagatorEventType.FULL_PROPAGATION.getMask()); + model.getSolver().getEngine().execute(propagators[p]); model.getSolver().getEngine().onPropagatorExecution(propagators[p]); } } diff --git a/solver/src/main/java/org/chocosolver/solver/constraints/ReificationConstraint.java b/solver/src/main/java/org/chocosolver/solver/constraints/ReificationConstraint.java index 7da812fbc6..bb614814b9 100644 --- a/solver/src/main/java/org/chocosolver/solver/constraints/ReificationConstraint.java +++ b/solver/src/main/java/org/chocosolver/solver/constraints/ReificationConstraint.java @@ -14,7 +14,6 @@ import org.chocosolver.solver.exception.ContradictionException; import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.Variable; -import org.chocosolver.solver.variables.events.PropagatorEventType; import org.chocosolver.util.ESat; import org.chocosolver.util.tools.ArrayUtils; @@ -107,7 +106,7 @@ public void activate(int idx) throws ContradictionException { for (int p = indices[idx]; p < indices[idx + 1]; p++) { assert (propagators[p].isReifiedAndSilent()); propagators[p].setReifiedTrue(); - propagators[p].propagate(PropagatorEventType.FULL_PROPAGATION.getMask()); + model.getSolver().getEngine().execute(propagators[p]); model.getSolver().getEngine().onPropagatorExecution(propagators[p]); } } diff --git a/solver/src/test/java/org/chocosolver/solver/constraints/nary/SubcircuitTest.java b/solver/src/test/java/org/chocosolver/solver/constraints/nary/SubcircuitTest.java index d6ce114971..55c20eb1e3 100644 --- a/solver/src/test/java/org/chocosolver/solver/constraints/nary/SubcircuitTest.java +++ b/solver/src/test/java/org/chocosolver/solver/constraints/nary/SubcircuitTest.java @@ -17,7 +17,9 @@ package org.chocosolver.solver.constraints.nary; import org.chocosolver.solver.Model; +import org.chocosolver.solver.Solver; import org.chocosolver.solver.search.strategy.Search; +import org.chocosolver.solver.variables.BoolVar; import org.chocosolver.solver.variables.IntVar; import org.testng.Assert; import org.testng.annotations.Test; @@ -137,4 +139,24 @@ private static int factorial(int n) { private static int parmi(int k, int n) { return factorial(n) / (factorial(k) * factorial(n - k)); } + + @Test(groups = "1s") + public void testThomSerg1() { + int n = 3; + Model model = new Model(); + + IntVar[] nodes = model.intVarArray(3, 0, n - 1); + IntVar length = model.intVar(0, n); + + BoolVar a = model.subCircuit(nodes, 0, length).reify(); + model.arithm(a, "=", 1).post(); + + model.arithm(nodes[0], "!=", 0).post(); + model.arithm(nodes[1], "=", 1).post(); + model.arithm(nodes[2], "!=", 2).post(); + + Solver solver = model.getSolver(); + solver.showDecisions(); + Assert.assertNotNull(solver.findSolution()); + } }