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); }
public void TestShiftRight1() { BDDAlgebra solver = new BDDAlgebra(); BDD cond1 = solver.MkSetFromRange(0, 7, 3); BDD cond2 = solver.MkSetFromElements(new uint[] {9, 10, 12, 15}, 3); BDD cond = solver.MkOr(cond1, cond2); Assert.AreEqual<int>(8, cond.CountNodes()); //Automata.Internal.DirectedGraphs.DotWriter.CharSetToDot(cond, "TestShiftRight", "c:/tmp/TestShiftRight1.dot", Internal.DirectedGraphs.DotWriter.RANKDIR.TB, 12); BDD sr = solver.ShiftRight(cond); Assert.AreEqual<BDD>(solver.True, sr); }
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); }
public void TestShiftRight1() { BDDAlgebra solver = new BDDAlgebra(); BDD cond1 = solver.MkSetFromRange(0, 7, 3); BDD cond2 = solver.MkSetFromElements(new uint[] { 9, 10, 12, 15 }, 3); BDD cond = solver.MkOr(cond1, cond2); Assert.AreEqual <int>(8, cond.CountNodes()); //Automata.Internal.DirectedGraphs.DotWriter.CharSetToDot(cond, "TestShiftRight", "c:/tmp/TestShiftRight1.dot", Internal.DirectedGraphs.DotWriter.RANKDIR.TB, 12); BDD sr = solver.ShiftRight(cond); Assert.AreEqual <BDD>(solver.True, sr); }
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); }
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); }
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); }
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); }
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); }
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); }