Exemplo n.º 1
0
        public void EmptyIntersect()
        {
            IntDomain a	= new IntDomain( 8, 55 );

            Assert.AreEqual( a.Intersect( a ), a );
            Assert.IsTrue( a.Intersect( new IntDomain() ).IsEmpty() );
        }
Exemplo n.º 2
0
        public void EmptyIntersect()
        {
            IntDomain a = new IntDomain(8, 55);

            Assert.AreEqual(a.Intersect(a), a);
            Assert.IsTrue(a.Intersect(new IntDomain()).IsEmpty());
        }
Exemplo n.º 3
0
 public void Intersect2()
 {
     IntDomain a	= new IntDomain( 8, 55 );
     IntDomain b	= new IntDomain( 40, 63 );
     IntDomain c	= b.Intersect( a );
     Validate( c, 40, 55 );
 }
Exemplo n.º 4
0
        public void Intersect5()
        {
            IntDomain a = new IntDomain(8, 55);
            IntDomain b = new IntDomain(40, 63);
            IntDomain c = a.Intersect(b);

            Validate(c, 40, 55);
        }
Exemplo n.º 5
0
        public void Intersect2()
        {
            IntDomain a = new IntDomain(8, 55);
            IntDomain b = new IntDomain(40, 63);
            IntDomain c = b.Intersect(a);

            Validate(c, 40, 55);
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        // 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);
        }
Exemplo n.º 8
0
 public void Intersect5()
 {
     IntDomain a	= new IntDomain( 8, 55 );
     IntDomain b	= new IntDomain( 40, 63 );
     IntDomain c	= a.Intersect( b );
     Validate( c, 40, 55 );
 }
Exemplo n.º 9
0
        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]);
            }
        }