Exemple #1
0
        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]);
            //}
        }