コード例 #1
0
ファイル: CharSetTests.cs プロジェクト: wellsoftware/Automata
        public void TestBvSetSolver5()
        {
            var solver = new BDDAlgebra();
            var a      = solver.MkSetFromRange(0, 3, 6);
            var b      = solver.MkSetFromRange(0x40, 0x43, 6);
            var c      = solver.MkSetFromRange(0x20, 0x23, 6);
            var d      = solver.MkSetFromRange(0x60, 0x63, 6);

            var all = new BDD[] { a, b, c, d };

            //a.ToDot("_0_3.dot");
            //b.ToDot("_10_13.dot");

            var a_size = solver.ComputeDomainSize(a, 6);
            var b_size = solver.ComputeDomainSize(b, 6);

            var x = solver.MkAnd(a, b);

            var u      = solver.MkOr(all);
            var u_size = solver.ComputeDomainSize(u, 6);

            //u.ToDot("_0_3_u_10_13.dot");

            var u_compl = solver.MkNot(u);
            //u_compl.ToDot("_0_3_u_10_13_compl.dot");


            var u_compl_size = solver.ComputeDomainSize(u_compl, 6);


            Assert.AreEqual <ulong>(4, a_size);
            Assert.AreEqual <ulong>(4, b_size);
            Assert.IsTrue(x.IsEmpty);
            Assert.AreEqual <ulong>(16, u_size);

            var ranges = solver.ToRanges(u, 6);

            Assert.AreEqual <int>(4, ranges.Length);
            Assert.AreEqual <uint>(0, ranges[0].First);
            Assert.AreEqual <uint>(3, ranges[0].Second);
            Assert.AreEqual <uint>(0x20, ranges[1].First);
            Assert.AreEqual <uint>(0x23, ranges[1].Second);
            Assert.AreEqual <uint>(0x40, ranges[2].First);
            Assert.AreEqual <uint>(0x43, ranges[2].Second);
            Assert.AreEqual <uint>(0x60, ranges[3].First);
            Assert.AreEqual <uint>(0x63, ranges[3].Second);
        }
コード例 #2
0
ファイル: CharSetTests.cs プロジェクト: wellsoftware/Automata
        public void TestBvSetSolver2()
        {
            var   solver   = new BDDAlgebra();
            var   set      = solver.MkNot(solver.MkOr(solver.MkSetFromRange(10001, uint.MaxValue, 31), solver.MkSetFromRange(5, 1004, 31)));
            ulong elems    = solver.ComputeDomainSize(set, 31);
            int   nodes    = set.CountNodes();
            uint  expected = 10000 - 1000 + 1;

            Assert.AreEqual <ulong>(expected, elems);
        }
コード例 #3
0
ファイル: CharSetTests.cs プロジェクト: wellsoftware/Automata
        public void TestBvSetSolver3()
        {
            var solver         = new BDDAlgebra();
            var letters_ASCII  = solver.MkOr(solver.MkSetFromRange('a', 'z', 6), solver.MkSetFromRange('A', 'Z', 6));
            var letters_eASCII = solver.MkOr(solver.MkSetFromRange('a', 'z', 7), solver.MkSetFromRange('A', 'Z', 7));

            Assert.AreEqual <ulong>(52, solver.ComputeDomainSize(letters_ASCII, 6));
            Assert.AreEqual <ulong>(52, solver.ComputeDomainSize(letters_eASCII, 7));

            var   set7      = solver.MkNot(letters_ASCII);
            ulong elems7    = solver.ComputeDomainSize(set7, 6);
            uint  expected7 = (1 << 7) - 52;

            Assert.AreEqual <ulong>(expected7, elems7);

            var   set8      = solver.MkNot(letters_eASCII);
            ulong elems8    = solver.ComputeDomainSize(set8, 7);
            ulong expected8 = (1 << 8) - 52;

            Assert.AreEqual <ulong>(expected8, elems8);
        }
コード例 #4
0
ファイル: CharSetTests.cs プロジェクト: wellsoftware/Automata
        public void TestBvSetSolver4()
        {
            var solver = new BDDAlgebra();
            var _0_3   = solver.MkSetFromRange(0, 3, 6);
            var _10_13 = solver.MkSetFromRange(0x40, 0x43, 6);

            //_0_3.ToDot("_0_3.dot");
            //_10_13.ToDot("_10_13.dot");

            var _0_3_size   = solver.ComputeDomainSize(_0_3, 6);
            var _10_13_size = solver.ComputeDomainSize(_10_13, 6);

            var x = solver.MkAnd(_0_3, _10_13);

            var _0_3_u_10_13      = solver.MkOr(_0_3, _10_13);
            var _0_3_u_10_13_size = solver.ComputeDomainSize(_0_3_u_10_13, 6);

            //_0_3_u_10_13.ToDot("_0_3_u_10_13.dot");

            var _0_3_u_10_13_compl = solver.MkNot(_0_3_u_10_13);
            //_0_3_u_10_13_compl.ToDot("_0_3_u_10_13_compl.dot");


            var _0_3_u_10_13_compl_size = solver.ComputeDomainSize(_0_3_u_10_13_compl, 6);


            Assert.AreEqual <ulong>(4, _0_3_size);
            Assert.AreEqual <ulong>(4, _10_13_size);
            Assert.IsTrue(x.IsEmpty);
            Assert.AreEqual <ulong>(8, _0_3_u_10_13_size);

            var ranges = solver.ToRanges(_0_3_u_10_13, 6);

            Assert.AreEqual <int>(2, ranges.Length);
            Assert.AreEqual <uint>(0, ranges[0].First);
            Assert.AreEqual <uint>(3, ranges[0].Second);
            Assert.AreEqual <uint>(0x40, ranges[1].First);
            Assert.AreEqual <uint>(0x43, ranges[1].Second);
        }
コード例 #5
0
 public void TestBvSetSolver()
 {
     var solver = new BDDAlgebra();
     var set = solver.MkOr(solver.MkSetFromRange(10001, uint.MaxValue, 31),solver.MkSetFromRange(5, 1004, 31));
     ulong elems = solver.ComputeDomainSize(set,31);
     int nodes = set.CountNodes();
     uint expected = (uint.MaxValue - 10000) + 1000;
     Assert.AreEqual<ulong>(expected, elems);
 }
コード例 #6
0
        public void TestBvSetSolver5()
        {
            var solver = new BDDAlgebra();
            var a = solver.MkSetFromRange(0, 3, 6);
            var b = solver.MkSetFromRange(0x40, 0x43, 6);
            var c = solver.MkSetFromRange(0x20, 0x23, 6);
            var d = solver.MkSetFromRange(0x60, 0x63, 6);

            var all = new BDD[] { a, b, c, d };

            //a.ToDot("_0_3.dot");
            //b.ToDot("_10_13.dot");

            var a_size = solver.ComputeDomainSize(a, 6);
            var b_size = solver.ComputeDomainSize(b, 6);

            var x = solver.MkAnd(a, b);

            var u = solver.MkOr(all);
            var u_size = solver.ComputeDomainSize(u, 6);

            //u.ToDot("_0_3_u_10_13.dot");

            var u_compl = solver.MkNot(u);
            //u_compl.ToDot("_0_3_u_10_13_compl.dot");

            var u_compl_size = solver.ComputeDomainSize(u_compl, 6);

            Assert.AreEqual<ulong>(4, a_size);
            Assert.AreEqual<ulong>(4, b_size);
            Assert.IsTrue(x.IsEmpty);
            Assert.AreEqual<ulong>(16, u_size);

            var ranges = solver.ToRanges(u, 6);
            Assert.AreEqual<int>(4, ranges.Length);
            Assert.AreEqual<uint>(0, ranges[0].First);
            Assert.AreEqual<uint>(3, ranges[0].Second);
            Assert.AreEqual<uint>(0x20, ranges[1].First);
            Assert.AreEqual<uint>(0x23, ranges[1].Second);
            Assert.AreEqual<uint>(0x40, ranges[2].First);
            Assert.AreEqual<uint>(0x43, ranges[2].Second);
            Assert.AreEqual<uint>(0x60, ranges[3].First);
            Assert.AreEqual<uint>(0x63, ranges[3].Second);
        }
コード例 #7
0
        public void TestBvSetSolver4()
        {
            var solver = new BDDAlgebra();
            var _0_3 = solver.MkSetFromRange(0, 3, 6);
            var _10_13 = solver.MkSetFromRange(0x40, 0x43, 6);

            //_0_3.ToDot("_0_3.dot");
            //_10_13.ToDot("_10_13.dot");

            var _0_3_size = solver.ComputeDomainSize(_0_3, 6);
            var _10_13_size = solver.ComputeDomainSize(_10_13, 6);

            var x = solver.MkAnd(_0_3, _10_13);

            var _0_3_u_10_13 = solver.MkOr(_0_3, _10_13);
            var _0_3_u_10_13_size = solver.ComputeDomainSize(_0_3_u_10_13, 6);

            //_0_3_u_10_13.ToDot("_0_3_u_10_13.dot");

            var _0_3_u_10_13_compl = solver.MkNot(_0_3_u_10_13);
            //_0_3_u_10_13_compl.ToDot("_0_3_u_10_13_compl.dot");

            var _0_3_u_10_13_compl_size = solver.ComputeDomainSize(_0_3_u_10_13_compl, 6);

            Assert.AreEqual<ulong>(4, _0_3_size);
            Assert.AreEqual<ulong>(4, _10_13_size);
            Assert.IsTrue(x.IsEmpty);
            Assert.AreEqual<ulong>(8, _0_3_u_10_13_size);

            var ranges = solver.ToRanges(_0_3_u_10_13, 6);
            Assert.AreEqual<int>(2, ranges.Length);
            Assert.AreEqual<uint>(0, ranges[0].First);
            Assert.AreEqual<uint>(3, ranges[0].Second);
            Assert.AreEqual<uint>(0x40, ranges[1].First);
            Assert.AreEqual<uint>(0x43, ranges[1].Second);
        }
コード例 #8
0
        public void TestBvSetSolver3()
        {
            var solver = new BDDAlgebra();
            var letters_ASCII = solver.MkOr(solver.MkSetFromRange('a', 'z', 6), solver.MkSetFromRange('A', 'Z', 6));
            var letters_eASCII = solver.MkOr(solver.MkSetFromRange('a', 'z', 7), solver.MkSetFromRange('A', 'Z', 7));

            Assert.AreEqual<ulong>(52, solver.ComputeDomainSize(letters_ASCII, 6));
            Assert.AreEqual<ulong>(52, solver.ComputeDomainSize(letters_eASCII, 7));

            var set7 = solver.MkNot(letters_ASCII);
            ulong elems7 = solver.ComputeDomainSize(set7, 6);
            uint expected7 = (1<<7) - 52;
            Assert.AreEqual<ulong>(expected7, elems7);

            var set8 = solver.MkNot(letters_eASCII);
            ulong elems8 = solver.ComputeDomainSize(set8, 7);
            ulong expected8 = (1<<8) - 52;
            Assert.AreEqual<ulong>(expected8, elems8);
        }