コード例 #1
0
 public void TestShiftLeftThenRight()
 {
     BDDAlgebra solver = new BDDAlgebra();
     BDD cond = solver.MkSetFromElements(new uint[] { 0, 15 }, 3);
     //Automata.Internal.DirectedGraphs.DotWriter.CharSetToDot(cond, "TestShiftLeft2_cond", "c:/tmp/TestShiftLeft2_cond.dot", Internal.DirectedGraphs.DotWriter.RANKDIR.TB, 12);
     BDD bvs = solver.ShiftLeft(cond, 4);
     BDD concat = solver.MkAnd(bvs, cond);
     Assert.AreEqual<int>(16, concat.CountNodes());
     BDD cond1 = solver.ShiftRight(solver.ShiftRight(solver.ShiftRight(solver.ShiftRight(concat))));
     Assert.AreEqual<BDD>(cond1, cond);
     //Automata.Internal.DirectedGraphs.DotWriter.CharSetToDot(concat, "TestShiftLeft2_concat", "c:/tmp/TestShiftLeft2_concat.dot", Internal.DirectedGraphs.DotWriter.RANKDIR.TB, 12);
 }
コード例 #2
0
ファイル: CharSetTests.cs プロジェクト: wellsoftware/Automata
        public void TestShiftLeftThenRight()
        {
            BDDAlgebra solver = new BDDAlgebra();
            BDD        cond   = solver.MkSetFromElements(new uint[] { 0, 15 }, 3);
            //Automata.Internal.DirectedGraphs.DotWriter.CharSetToDot(cond, "TestShiftLeft2_cond", "c:/tmp/TestShiftLeft2_cond.dot", Internal.DirectedGraphs.DotWriter.RANKDIR.TB, 12);
            BDD bvs    = solver.ShiftLeft(cond, 4);
            BDD concat = solver.MkAnd(bvs, cond);

            Assert.AreEqual <int>(16, concat.CountNodes());
            BDD cond1 = solver.ShiftRight(solver.ShiftRight(solver.ShiftRight(solver.ShiftRight(concat))));

            Assert.AreEqual <BDD>(cond1, cond);
            //Automata.Internal.DirectedGraphs.DotWriter.CharSetToDot(concat, "TestShiftLeft2_concat", "c:/tmp/TestShiftLeft2_concat.dot", Internal.DirectedGraphs.DotWriter.RANKDIR.TB, 12);
        }
コード例 #3
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);
        }
コード例 #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 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);
        }
コード例 #6
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);
        }