public void EmptyIntersect() { IntDomain a = new IntDomain( 8, 55 ); Assert.AreEqual( a.Intersect( a ), a ); Assert.IsTrue( a.Intersect( new IntDomain() ).IsEmpty() ); }
public void EmptyIntersect() { IntDomain a = new IntDomain(8, 55); Assert.AreEqual(a.Intersect(a), a); Assert.IsTrue(a.Intersect(new IntDomain()).IsEmpty()); }
public void Intersect2() { IntDomain a = new IntDomain( 8, 55 ); IntDomain b = new IntDomain( 40, 63 ); IntDomain c = b.Intersect( a ); Validate( c, 40, 55 ); }
public void Intersect5() { IntDomain a = new IntDomain(8, 55); IntDomain b = new IntDomain(40, 63); IntDomain c = a.Intersect(b); Validate(c, 40, 55); }
public void Intersect2() { IntDomain a = new IntDomain(8, 55); IntDomain b = new IntDomain(40, 63); IntDomain c = b.Intersect(a); Validate(c, 40, 55); }
public override void Update() { // v0 = val * v1 // v1 = v0 / val IntDomain v0 = Var0.Domain; IntDomain v1 = Var1.Domain; IntDomain w0, w1; do { w0 = v0; w1 = v1; v0 = v0.Intersect(Domain * v1); v1 = v1.Intersect(v0 / Domain); }while(!ReferenceEquals(w0, v0) || !ReferenceEquals(w1, v1)); Var0.Update(v0); Var1.Update(v1); }
// v0 = v1 / v2 // v1 = v0 * v2 // v2 = v1 / v0 public override void Update() { IntDomain v0 = Var0.Domain; IntDomain v1 = Var1.Domain; IntDomain v2 = Var2.Domain; IntDomain w0, w1, w2; do { w0 = v0; w1 = v1; w2 = v2; v0 = v0.Intersect(v1 / v2); v1 = v1.Intersect(v0 * v2); v2 = v2.Intersect(v0 / v1); }while(!ReferenceEquals(w0, v0) || !ReferenceEquals(w1, v1) || !ReferenceEquals(w2, v2)); Var0.Update(v0); Var1.Update(v1); Var2.Update(v2); }
public void Intersect5() { IntDomain a = new IntDomain( 8, 55 ); IntDomain b = new IntDomain( 40, 63 ); IntDomain c = a.Intersect( b ); Validate( c, 40, 55 ); }
private void Update1() { int sum_min = 0; int sum_max = 0; for (int idx = 0; idx < VarList.Count; ++idx) { IntDomain dom = VarList[idx].Domain; m_DomArray[idx] = dom; sum_min += dom.Min; sum_max += dom.Max; } if (m_Value < sum_min || m_Value > sum_max) { Violate(); return; } for (int idx = 0; idx < VarList.Count; ++idx) { IntDomain dom = m_DomArray[idx]; int min = m_Value - (sum_max - dom.Max); int max = m_Value - (sum_min - dom.Min); if (min > dom.Min || max < dom.Max) { sum_min -= dom.Min; sum_max -= dom.Max; dom = dom.Intersect(min, max); if (dom.IsEmpty()) { Violate(); return; } sum_min += dom.Min; sum_max += dom.Max; if (m_Value < sum_min || m_Value > sum_max) { Violate(); return; } m_DomArray[idx] = dom; idx = -1; } } for (int idx = 0; idx < VarList.Count; ++idx) { VarList[idx].Update(m_DomArray[idx]); } }