chocoteam/choco3 — pull request #210 by JLiangWaterloo (2014-06-26 17:16:06+00:00)
Title: Fixed PropTimesNaive failing idempotency check.

*times* constraint is not idempotent. The following code will demonstrate this.

```java
public static void main(String[] args) throws Exception {
Solver s = new Solver();
IntVar a = VF.enumerated("a", 0, 3, s);
IntVar b = VF.enumerated("b", -3, 3, s);
Constraint c = ICF.times(a, b, VF.fixed(3, s));
for(Propagator p : c.getPropagators()) {
p.propagate(EventType.FULL_PROPAGATION.mask);
}
System.out.println(a.contains(0));
for(Propagator p : c.getPropagators()) {
p.propagate(EventType.FULL_PROPAGATION.mask);
}
System.out.println(a.contains(0));
}
```

It will print "true, false" meaning the first propagation did not reach a fixed point.

The bug is because of the following code:
```java
return var.updateLowerBound(min, this) & var.updateUpperBound(max, this);
```

The "&" means that changes will be notified if both the upper and lower bound were altered.