static void Test2() { //CUDDNode a, b, c; //CUDDVars vars; Console.WriteLine("\nTest program for CUDD\n===================="); // initialise cudd CUDD.InitialiseCUDD(256, 256, 262144, 0.1); CUDDNode firstOne = CUDD.Constant(1); Console.WriteLine("initial one: {0}", CUDD.GetReference(firstOne)); CUDDNode firstZero = CUDD.Constant(0); Console.WriteLine("initial zero: {0}", CUDD.GetReference(firstZero)); CUDDNode x0 = CUDD.Var(0); CUDDNode x1 = CUDD.Var(1); Console.WriteLine("var({0}): {1}", 0, CUDD.GetReference(x0)); Console.WriteLine("var({0}): {1}", 1, CUDD.GetReference(x1)); CUDDNode andNode = CUDD.Function.And(x0, x1); //CUDD.Ref(andNode); Console.WriteLine("var({0}): {1}", 0, CUDD.GetReference(x0)); Console.WriteLine("var({0}): {1}", 1, CUDD.GetReference(x1)); Console.WriteLine("and node: {0}", CUDD.GetReference(andNode)); //Console.WriteLine(CUDD.GetReference(andNode)); //CUDDNode one = CUDD.Constant(1); //Console.WriteLine("initial one: {0}", CUDD.GetReference(one)); //CUDDNode f, var, tmp; //f = CUDD.Constant(1); //Console.WriteLine("initial f: {0}", CUDD.GetReference(f)); //CUDD.Ref(f); //Console.WriteLine("after ref f: {0}", CUDD.GetReference(f)); //for (int i = 3; i >= 0; i--) //{ // Console.WriteLine(); // Console.WriteLine(i); // var = CUDD.Var(i); // Console.WriteLine("Before and var({0}): {1}", i, CUDD.GetReference(var)); // Console.WriteLine(); // tmp = CUDD.Function.And(CUDD.Function.Not(var), f); // Console.WriteLine("After and var({0}): {1}", i, CUDD.GetReference(var)); // Console.WriteLine("After and f: {0}", CUDD.GetReference(f)); // Console.WriteLine("After and tmp: {0}", CUDD.GetReference(tmp)); // Console.WriteLine(); // CUDD.Ref(tmp); // Console.WriteLine("After ref tmp: {0}", CUDD.GetReference(tmp)); // Console.WriteLine(); // CUDD.Deref(f); // Console.WriteLine("After deref f: {0}", CUDD.GetReference(f)); // Console.WriteLine(); // f = tmp; // Console.WriteLine("After assignment f: {0}", CUDD.GetReference(f)); // Console.WriteLine("After assignment tmp: {0}", CUDD.GetReference(tmp)); //} //CUDDNode x0 = CUDD.Var(0); ////CUDDNode notx0 = CUDD.Function.Not(CUDD.Var(0)); ////Console.WriteLine("notx0: {0}", CUDD.GetReference(notx0)); //CUDDNode x1 = CUDD.Var(1); //CUDDNode x2 = CUDD.Var(2); //CUDDNode x3 = CUDD.Var(3); ////CUDD.Ref(x1); //Console.WriteLine("x0: {0}", CUDD.GetReference(x0)); //Console.WriteLine("x1: {0}", CUDD.GetReference(x1)); //Console.WriteLine("x2: {0}", CUDD.GetReference(x2)); //Console.WriteLine("x3: {0}", CUDD.GetReference(x3)); //Console.WriteLine(); //CUDDNode andNode1 = CUDD.Function.And(x0, x1); //CUDD.Ref(andNode1); //Console.WriteLine("x0: {0}", CUDD.GetReference(x0)); //Console.WriteLine("x1: {0}", CUDD.GetReference(x1)); //Console.WriteLine("andNode1: {0}", CUDD.GetReference(andNode1)); //Console.WriteLine(); //CUDDNode andNode2 = CUDD.Function.And(x2, x3); //CUDD.Ref(andNode2); ////CUDD.Deref(orNode); //Console.WriteLine("x2: {0}", CUDD.GetReference(x2)); //Console.WriteLine("x3: {0}", CUDD.GetReference(x3)); //Console.WriteLine("andNode2: {0}", CUDD.GetReference(andNode2)); //Console.WriteLine(); //CUDDNode orNode = CUDD.Function.Or(andNode2, andNode1); //CUDD.Ref(orNode); //CUDD.Deref(andNode1); //CUDD.Deref(andNode2); //Console.WriteLine("x0: {0}", CUDD.GetReference(x0)); //Console.WriteLine("x1: {0}", CUDD.GetReference(x1)); //Console.WriteLine("x2: {0}", CUDD.GetReference(x2)); //Console.WriteLine("x3: {0}", CUDD.GetReference(x3)); //Console.WriteLine("andNode1: {0}", CUDD.GetReference(andNode1)); //Console.WriteLine("andNode2: {0}", CUDD.GetReference(andNode2)); //Console.WriteLine("orNode: {0}", CUDD.GetReference(orNode)); //CUDD.Deref(orNode); //Console.WriteLine("andNode: {0}", CUDD.GetReference(andNode)); //Console.WriteLine("orNode: {0}", CUDD.GetReference(orNode)); //Console.WriteLine("x2: {0}", CUDD.GetReference(x2)); //CUDD.Deref(orNode); //Console.WriteLine("andNode: {0}", CUDD.GetReference(andNode)); //Console.WriteLine("orNode: {0}", CUDD.GetReference(orNode)); //Console.WriteLine("x2: {0}", CUDD.GetReference(x2)); //CUDD.Deref(orNode); //Console.WriteLine("andNode: {0}", CUDD.GetReference(andNode)); //Console.WriteLine("orNode: {0}", CUDD.GetReference(orNode)); //Console.WriteLine("x2: {0}", CUDD.GetReference(x2)); //CUDDNode orNode = CUDD.Function.Or(x0, x1); //Console.WriteLine("x0: {0}", CUDD.GetReference(x0)); //Console.WriteLine("x1: {0}", CUDD.GetReference(x1)); //Console.WriteLine("orNode: {0}", CUDD.GetReference(orNode)); //CUDDNode impliesNode = CUDD.Function.Implies(x0, x1); //Console.WriteLine("x0: {0}", CUDD.GetReference(x0)); //Console.WriteLine("x1: {0}", CUDD.GetReference(x1)); //Console.WriteLine("impliesNode: {0}", CUDD.GetReference(impliesNode)); //CUDDNode f = CUDD.ZERO; //CUDDNode var, tmp; //CUDD.Ref(f); //int count = 1000; //CUDD.Var(count); //for (int i = count; i >= 0; i--) ////for (int i = 0; i <= count; i++) //{ // var = CUDD.Var(i); // //if (i % 6 == 0) // //{ // tmp = CUDD.Function.Or(var, f); // //} // //else // //{ // // tmp = CUDD.Function.And(var, f); // //} // CUDD.Ref(tmp); // CUDD.Deref(f); // f = tmp; // if (i % 1000 == 0) // { // Console.WriteLine("Index: {0}", i); // Console.WriteLine("Memory: {0} Kbytes", CUDD.ReadMemoryInUse() / 1024); // //Console.WriteLine("Number of nodes: {0}", CUDD.GetNumNodes(f)); // Console.WriteLine(); // CUDD.Debug.DebugCheck(); // } //} //CUDD.Print.PrintMinterm(f); //CUDDNode x0 = CUDD.Var(0); //CUDDNode x1 = CUDD.Var(1); //CUDDNode x2 = CUDD.Var(2); //CUDDNode effect = CUDD.Function.Implies(x2, x1); //CUDDNode frame = CUDD.Function.Implies(CUDD.Function.Not(x2), CUDD.Function.Equal(x0, x1)); //CUDDNode firstSsa = CUDD.Function.And(effect, frame); //CUDDNode secondSsa = CUDD.Function.Equal(x1, CUDD.Function.Or(x2, x0)); //CUDD.Print.PrintMinterm(firstSsa); //CUDD.Print.PrintMinterm(secondSsa); //CUDDNode xor = CUDD.Function.Xor(x0, x1); //CUDD.Ref(xor); //CUDDNode and1 = CUDD.Function.And(x0, CUDD.Function.Not(x1)); //CUDD.Ref(and1); //CUDDNode and2 = CUDD.Function.And(x0, x1); //CUDD.Ref(and2); //CUDDNode sum = CUDD.Function.Or(and1, and2); //CUDD.Ref(sum); //CUDD.Deref(and1); //CUDD.Deref(and2); //CUDDNode and = CUDD.Function.And(x0, CUDD.Function.Not(x0)); //CUDD.Ref(and); //CUDDNode or = CUDD.Function.Or(x0, CUDD.Function.Not(x0)); //CUDD.Ref(or); ////CUDDNode node = CUDD.Function.Equal(and, CUDD.ZERO); //CUDDNode node = CUDD.Function.Equal(or, CUDD.ZERO); //Console.WriteLine(node.GetValue()); //CUDDNode xor2 = CUDD.Function.Or() //CUDDNode and1 = CUDD.Function.And(x0, CUDD.Function.Not(x1)); //CUDD.Ref(and1); //CUDDNode and2 = CUDD.Function.And(CUDD.Function.Not(x0), x1); //CUDD.Ref(and2); //CUDDNode sum = CUDD.Function.Or(and1, and2); //CUDD.Ref(sum); //CUDD.Deref(and1); //CUDD.Deref(and2); //CUDDNode carry = CUDD.Function.And(x0, x1); //CUDD.Ref(carry); //int size = 4; //CUDDNode[] restrictBy = new CUDDNode[4]; //CUDDNode[] testSum = new CUDDNode[4]; //CUDDNode[] testCarry = new CUDDNode[4]; //restrictBy[0] = CUDD.Function.And(CUDD.Function.Not(x0), CUDD.Function.Not(x1)); //restrictBy[1] = CUDD.Function.And(CUDD.Function.Not(x0), x1); //restrictBy[2] = CUDD.Function.And(x0, CUDD.Function.Not(x1)); //restrictBy[3] = CUDD.Function.And(x0, x1); //for (int i = 0; i < size; i++) //{ // CUDD.Ref(restrictBy[i]); // testSum[i] = CUDD.Function.Restrict(sum, restrictBy[i]); // testCarry[i] = CUDD.Function.Restrict(carry, restrictBy[i]); // CUDD.Deref(restrictBy[i]); //} //CUDD.Print.PrintBDDTree(testSum[0]); //for (int i = 0; i < size; i++) //{ // CUDD.Deref(testSum[i]); // CUDD.Deref(testSum[i]); //} }