コード例 #1
0
        //public class Test
        //{
        //    /// <summary>
        //    /// Test the CUDD
        //    /// </summary>
        //    public static void Test1()
        //    {
        //        CUDDNode a, b, c;
        //        CUDDVars vars;

        //        Console.WriteLine("\nTest program for CUDD\n====================");

        //        // initialise cudd
        //        CUDD.InitialiseCUDD(256, 256, 262144, 0.1);

        //        // set up some variables
        //        vars = new CUDDVars();
        //        vars.AddVar(CUDD.Var(0));
        //        vars.AddVar(CUDD.Var(2));

        //        // blank dd
        //        a = CUDD.Create();
        //        Console.WriteLine("\nCreate()");
        //        CUDD.Print.PrintVector(a, vars);
        //        CUDD.Deref(a);

        //        // constant
        //        a = CUDD.Constant(1.5);
        //        Console.WriteLine("\nConstant(1.5)");
        //        CUDD.Print.PrintVector(a, vars);
        //        CUDD.Deref(a);

        //        // plus infinity
        //        a = CUDD.PlusInfinity();
        //        Console.WriteLine("\nPlusInfinity()");
        //        CUDD.Print.PrintVector(a, vars);
        //        CUDD.Deref(a);

        //        // minus infinity
        //        a = CUDD.MinusInfinity();
        //        Console.WriteLine("\nMinusInfinity()");
        //        CUDD.Print.PrintVector(a, vars);
        //        CUDD.Deref(a);

        //        // var
        //        a = CUDD.Var(0);
        //        Console.WriteLine("\nVar(0)");
        //        CUDD.Print.PrintVector(a, vars);
        //        CUDD.Deref(a);

        //        a = CUDD.Var(0);
        //        b = CUDD.Var(2);
        //        Console.Write("\na: ");
        //        CUDD.Print.PrintVector(a, vars);
        //        Console.Write("b: ");
        //        CUDD.Print.PrintVector(b, vars);

        //        // not
        //        CUDD.Ref(a);
        //        c = CUDD.Function.Not(a);
        //        Console.WriteLine("\nNot(a)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);

        //        // or
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Or(a, b);
        //        Console.WriteLine("\nOr(a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);

        //        // and
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.And(a, b);
        //        Console.WriteLine("\nAnd(a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);

        //        // xor
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Xor(a, b);
        //        Console.WriteLine("\nXor(a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);

        //        // implies
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Implies(a, b);
        //        Console.WriteLine("\nImplies(a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);

        //        CUDD.Deref(a);
        //        CUDD.Deref(b);

        //        a = CUDD.Create();
        //        a = CUDD.Matrix.SetVectorElement(a, vars, 0, 1);
        //        a = CUDD.Matrix.SetVectorElement(a, vars, 1, 2);
        //        a = CUDD.Matrix.SetVectorElement(a, vars, 2, 3);
        //        a = CUDD.Matrix.SetVectorElement(a, vars, 3, 4);
        //        b = CUDD.Create();
        //        b = CUDD.Matrix.SetVectorElement(b, vars, 0, 0);
        //        b = CUDD.Matrix.SetVectorElement(b, vars, 1, 2);
        //        b = CUDD.Matrix.SetVectorElement(b, vars, 2, 4);
        //        b = CUDD.Matrix.SetVectorElement(b, vars, 3, 6);
        //        Console.Write("\na: ");
        //        CUDD.Print.PrintVector(a, vars);
        //        Console.Write("b: ");
        //        CUDD.Print.PrintVector(b, vars);

        //        // apply
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Plus(a, b);
        //        Console.WriteLine("\nApply(+, a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Minus(a, b);
        //        Console.WriteLine("\nApply(-, a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Times(a, b);
        //        Console.WriteLine("\nApply(*, a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);
        //        CUDD.Ref(a);
        //        CUDD.Ref(b);
        //        c = CUDD.Function.Divide(a, b);
        //        Console.WriteLine("\nApply(/, a, b)");
        //        CUDD.Print.PrintVector(c, vars);
        //        CUDD.Deref(c);


        //        CUDD.Deref(a);
        //        CUDD.Deref(b);

        //        // dereference variables
        //        vars.Deref();


        //        // close down cudd
        //        CUDD.CloseDownCUDD();
        //        Console.WriteLine();
        //    }
        //}


        /// <summary>
        /// Check whether a node is a constant
        /// </summary>
        public static bool IsConstant(CUDDNode dd)
        {
            return(PlatformInvoke.DDN_IsConstant(dd.Ptr) == 1);
        }