コード例 #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 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);
        }
コード例 #3
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);
        }
コード例 #4
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);
        }