public void TestSwapSimple2() { var manager = new BDDManager(3); var n2 = manager.Create(2, manager.One, manager.Zero); var n3 = manager.Create(1, manager.One, n2); var n4 = manager.Create(1, manager.Zero, manager.One); var root = manager.Create(0, n3, n4); var dict = new Dictionary <int, string> { { 0, "a" }, { 1, "b" }, { 2, "c" } }; var rdict = dict.ToDictionary((x) => x.Value, (x) => x.Key); var truth = BuildThruthTable(manager, root); Console.WriteLine(manager.ToDot(root, (x) => x.RefCount.ToString())); var res = manager.Swap(root, rdict["b"], rdict["c"]); CheckThruthTable(truth, res); Console.WriteLine(manager.ToDot(res, (x) => x.RefCount.ToString())); res = manager.Reduce(res); CheckThruthTable(truth, res); Console.WriteLine(manager.ToDot(res, (x) => x.RefCount.ToString())); }
public void TestSimpleITE() { var manager = new BDDManager(4); var b = manager.Create(1, manager.One, manager.Zero); var f = manager.Create(0, manager.One, b); var c = manager.Create(2, manager.One, manager.Zero); var g = manager.Create(0, c, manager.Zero); var d = manager.Create(3, manager.One, manager.Zero); var h = manager.Create(1, manager.One, d); var dict = new Dictionary <int, string> { { 0, "a" }, { 1, "b" }, { 2, "c" }, { 3, "d" } }; var res = manager.ITE(f, g, h); manager.Reduce(res); Assert.AreEqual(0, res.Index); Assert.AreEqual(2, res.High.Index); Assert.AreEqual(1, res.Low.Index); Assert.AreEqual(3, res.Low.Low.Index); Assert.AreEqual(true, res.High.High.Value); Assert.AreEqual(false, res.High.Low.Value); Assert.AreEqual(false, res.Low.High.Value); Assert.AreEqual(true, res.Low.Low.High.Value); Assert.AreEqual(false, res.Low.Low.Low.Value); }
public void TestReduceInfEdAcUk() { var manager = new BDDManager(3); var n1 = manager.Create(2, manager.One, manager.Zero); var n2 = manager.Create(2, manager.One, manager.Zero); var n3 = manager.Create(1, n1, manager.Zero); var n4 = manager.Create(1, n2, n1); var n5 = manager.Create(0, n4, n3); var truth = BuildThruthTable(manager, n5); var res = manager.Reduce(n5); CheckThruthTable(truth, res); Assert.AreEqual(0, res.Index); Assert.AreEqual(1, res.Low.Index); Assert.AreEqual(2, res.Low.High.Index); Assert.AreEqual(2, res.High.Index); Assert.AreEqual(false, res.Low.Low.Value); Assert.AreEqual(false, res.Low.High.Low.Value); Assert.AreEqual(false, res.High.Low.Value); Assert.AreEqual(true, res.High.High.Value); Assert.AreEqual(true, res.Low.High.High.Value); }
public void TestReduceSimple() { var manager = new BDDManager(3); var n3 = manager.Create(2, manager.One, manager.One); var n4 = manager.Create(1, n3, manager.Zero); var n2 = manager.Create(1, n3, manager.Zero); var root = manager.Create(0, n2, n4); var truth = BuildThruthTable(manager, root); var res = manager.Reduce(root); CheckThruthTable(truth, res); Assert.AreEqual(1, res.Index); Assert.AreEqual(false, res.Low.Value); Assert.AreEqual(true, res.High.Value); }
public void TestSwapAsymetric() { var manager = new BDDManager(2); var n3 = manager.Create(1, manager.One, manager.Zero); var root = manager.Create(0, n3, manager.One); var dict = new Dictionary <int, string> { { 0, "a" }, { 1, "b" }, { 2, "c" } }; var truth = BuildThruthTable(manager, root); Console.WriteLine(manager.ToDot(root, (x) => x.RefCount.ToString())); var res = manager.Reduce(manager.Swap(root, 0, 1)); Console.WriteLine(manager.ToDot(res, (x) => x.RefCount.ToString())); CheckThruthTable(truth, res); }
public void TestReduceInfUnibzIt() { var manager = new BDDManager(4); var n1 = manager.Create(3, manager.Zero, manager.Zero); var n2 = manager.Create(3, manager.One, manager.Zero); var n3 = manager.Create(3, manager.Zero, manager.Zero); var n4 = manager.Create(3, manager.One, manager.Zero); var n5 = manager.Create(3, manager.Zero, manager.Zero); var n6 = manager.Create(3, manager.One, manager.Zero); var n7 = manager.Create(3, manager.One, manager.One); var n8 = manager.Create(3, manager.One, manager.One); var n9 = manager.Create(2, n2, n1); var n10 = manager.Create(2, n4, n3); var n11 = manager.Create(2, n6, n5); var n12 = manager.Create(2, n8, n7); var n13 = manager.Create(1, n10, n9); var n14 = manager.Create(1, n12, n11); var n15 = manager.Create(0, n14, n13); var truth = BuildThruthTable(manager, n15); var res = manager.Reduce(n15); CheckThruthTable(truth, res); Assert.AreEqual(0, res.Index); Assert.AreEqual(2, res.Low.Index); Assert.AreEqual(3, res.Low.High.Index); Assert.AreEqual(1, res.High.Index); Assert.AreEqual(2, res.High.Low.Index); Assert.AreEqual(false, res.Low.Low.Value); Assert.AreEqual(false, res.Low.High.Low.Value); Assert.AreEqual(false, res.High.Low.Low.Value); Assert.AreEqual(true, res.High.High.Value); Assert.AreEqual(true, res.Low.High.High.Value); }
private void button5_Click(object sender, EventArgs e) { if (textBox1.Text != "") { string input = textBox1.Text; List <Token> rpn = Arithmetic.Calculate(input); if (rpn != null) { Dictionary <string, bool> variables = Arithmetic.GetVariables(rpn); var manager = new BDDManager(variables.Count); var root = Arithmetic.CreateTree(rpn, variables, manager); if (root != null) { List <BDDNode> list = root.Nodes.ToList(); var v1 = new Dictionary <int, string>(); int j = 0; foreach (KeyValuePair <string, bool> kv in variables) { v1.Add(j, kv.Key); j++; } manager.Reduce(root); Func <BDDNode, string> labelFunction = (x) => v1[x.Index]; Bitmap bm = new Bitmap(Graphviz.RenderImage(manager.ToDot(root, labelFunction, false), "jpg")); pictureBox1.Image = bm; label1.Text = "Готово"; } else { label1.Text = "Ошибка при вычислении логической формулы"; } } else { label1.Text = "Ошибка ввода логической формулы"; } } }