From 136f8e720caeed844e4a185d6ecd4cf0aa07059c Mon Sep 17 00:00:00 2001 From: "lperron@google.com" Date: Wed, 4 Jul 2012 16:43:11 +0000 Subject: [PATCH] fix --- src/constraint_solver/expressions.cc | 16 ++++++++++++---- src/flatzinc/mznlib/maximum.mzn | 2 +- src/flatzinc/mznlib/maximum_int.mzn | 7 +++++++ src/flatzinc/mznlib/minimum.mzn | 2 +- src/flatzinc/mznlib/minimum_int.mzn | 7 +++++++ 5 files changed, 28 insertions(+), 6 deletions(-) create mode 100644 src/flatzinc/mznlib/maximum_int.mzn create mode 100644 src/flatzinc/mznlib/minimum_int.mzn diff --git a/src/constraint_solver/expressions.cc b/src/constraint_solver/expressions.cc index 8bd636bee5..3d6bef147d 100644 --- a/src/constraint_solver/expressions.cc +++ b/src/constraint_solver/expressions.cc @@ -436,6 +436,10 @@ class DomainIntVar : public IntVar { visitor->EndVisitConstraint(ModelVisitor::kVarValueWatcher, this); } + virtual string DebugString() const { + return StringPrintf("ValueWatcher(%s)", variable_->DebugString().c_str()); + } + private: void Zero(int64 index) { IntVar* const boolvar = watchers_.At(index); @@ -636,6 +640,10 @@ class DomainIntVar : public IntVar { visitor->EndVisitConstraint(ModelVisitor::kVarBoundWatcher, this); } + virtual string DebugString() const { + return StringPrintf("BoundWatcher(%s)", variable_->DebugString().c_str()); + } + private: void Zero(int64 index) { IntVar* const boolvar = watchers_.At(index); @@ -1858,9 +1866,9 @@ class BooleanVar : public IntVar { } virtual IntVar* IsGreaterOrEqual(int64 constant) { - if (constant >= 1) { + if (constant > 1) { return solver()->MakeIntConst(0); - } else if (constant < 0) { + } else if (constant <= 0) { return solver()->MakeIntConst(1); } else { return this; @@ -2716,7 +2724,7 @@ class TimesCstIntVar : public IntVar { if (cst_ > 0) { return var_->IsGreaterOrEqual(PosIntDivUp(constant, cst_)); } else { - return var_->IsLessOrEqual(-PosIntDivUp(constant, -cst_)); + return var_->IsLessOrEqual(PosIntDivUp(-constant, -cst_)); } } // CHECK ME @@ -2724,7 +2732,7 @@ class TimesCstIntVar : public IntVar { if (cst_ > 0) { return var_->IsLessOrEqual(PosIntDivDown(constant, cst_)); } else { - return var_->IsGreaterOrEqual(-PosIntDivDown(constant, -cst_)); + return var_->IsGreaterOrEqual(PosIntDivDown(-constant, -cst_)); } } // CHECK ME diff --git a/src/flatzinc/mznlib/maximum.mzn b/src/flatzinc/mznlib/maximum.mzn index a80ed2db22..3e73952edd 100644 --- a/src/flatzinc/mznlib/maximum.mzn +++ b/src/flatzinc/mznlib/maximum.mzn @@ -3,7 +3,7 @@ % Assumptions: |x| > 0. %-----------------------------------------------------------------------------% -predicate maximum_int(var int: m, array[int] of var int: x); +include "maximum_int.mzn"; predicate maximum(var int: m, array[int] of var int: x) = maximum_int(m, x); diff --git a/src/flatzinc/mznlib/maximum_int.mzn b/src/flatzinc/mznlib/maximum_int.mzn new file mode 100644 index 0000000000..f3afab1480 --- /dev/null +++ b/src/flatzinc/mznlib/maximum_int.mzn @@ -0,0 +1,7 @@ +%-----------------------------------------------------------------------------% +% Constrains 'm' to be the maximum of the values in 'x'. +% Assumptions: |x| > 0. +%-----------------------------------------------------------------------------% + +predicate maximum_int(var int: m, array[int] of var int: x); + diff --git a/src/flatzinc/mznlib/minimum.mzn b/src/flatzinc/mznlib/minimum.mzn index fb8d430cbb..b410eae63e 100644 --- a/src/flatzinc/mznlib/minimum.mzn +++ b/src/flatzinc/mznlib/minimum.mzn @@ -3,7 +3,7 @@ % Assumptions: |x| > 0. %-----------------------------------------------------------------------------% -predicate minimum_int(var int: m, array[int] of var int: x); +include "minimum_int.mzn"; predicate minimum(var int: m, array[int] of var int: x) = minimum_int(m, x); diff --git a/src/flatzinc/mznlib/minimum_int.mzn b/src/flatzinc/mznlib/minimum_int.mzn new file mode 100644 index 0000000000..d2d128c2ae --- /dev/null +++ b/src/flatzinc/mznlib/minimum_int.mzn @@ -0,0 +1,7 @@ +%-----------------------------------------------------------------------------% +% Constrains 'm' to be the minimum of the values in 'x'. +% Assumptions: |x| > 0. +%-----------------------------------------------------------------------------% + +predicate minimum_int(var int: m, array[int] of var int: x); +