예제 #1
0
        static void opEQU()
        {
            bool?[]     bl_vs    = new bool?[] { true, null, false };
            SmartBool[] sm_bl_vs = new SmartBool[] { true, null, false };

            // Is equals to the following:
            // SmartBool[] sm_bl_vs = new SmartBool[] { SmartBool.True, SmartBool.Unknown, SmartBool.False };

            Console.WriteLine("Operation == (bool?)");
            Console.WriteLine("---");

            Console.Write("  ");

            for (int i = 0; i < bl_vs.Length; i++)
            {
                Console.Write("\t{0}", bl_vs[i].Format());
            }

            Console.WriteLine();

            for (int j = 0; j < bl_vs.Length; j++)
            {
                Console.Write(bl_vs[j].Format());

                for (int i = 0; i < bl_vs.Length; i++)
                {
                    Console.Write("\t{0}", bl_vs[j].IsEquivalentTo(bl_vs[i]).Format());
                }

                Console.WriteLine();
            }

            Console.WriteLine();

            Console.WriteLine("Operation == (SmartBool)");
            Console.WriteLine("---");

            Console.Write("  ");

            for (int i = 0; i < sm_bl_vs.Length; i++)
            {
                Console.Write("\t{0}", sm_bl_vs[i].ToString());
            }

            Console.WriteLine();

            for (int j = 0; j < sm_bl_vs.Length; j++)
            {
                Console.Write(sm_bl_vs[j].ToString());

                for (int i = 0; i < sm_bl_vs.Length; i++)
                {
                    Console.Write("\t{0}", (sm_bl_vs[j] == sm_bl_vs[i]).ToString());
                }

                Console.WriteLine();
            }

            Console.WriteLine();
        }
예제 #2
0
        static void opNOT()
        {
            bool?[]     bl_vs    = new bool?[] { true, null, false };
            SmartBool[] sm_bl_vs = new SmartBool[] { true, null, false };

            // Is equals to the following:
            // SmartBool[] sm_bl_vs = new SmartBool[] { SmartBool.True, SmartBool.Unknown, SmartBool.False };

            Console.WriteLine("Operation NOT (bool?)");
            Console.WriteLine("---");

            for (int i = 0; i < bl_vs.Length; i++)
            {
                Console.WriteLine("{0}\t{1}", (bl_vs[i]).Format(), (!bl_vs[i]).Format());
            }

            Console.WriteLine();

            Console.WriteLine("Operation NOT (SmartBool)");
            Console.WriteLine("---");

            for (int i = 0; i < sm_bl_vs.Length; i++)
            {
                Console.WriteLine("{0}\t{1}", (sm_bl_vs[i]).ToString(), (!sm_bl_vs[i]).ToString());
            }

            Console.WriteLine();
        }
예제 #3
0
        static void opIF()
        {
            bool?bn = null;
            bool b2 = (bool)bn;

            if ((bool)bn)
            {
                Console.WriteLine("True");
            }
            else
            {
                Console.WriteLine("False or Unknown");
            }

            SmartBool sb = SmartBool.Unknown;
            // SmartBool sb = null;
            bool sb2 = (bool)sb;

            if (sb)
            {
                Console.WriteLine("True");
            }
            else
            {
                Console.WriteLine("False or Unknown");
            }
        }
예제 #4
0
        public void SmartBool_Parse_Test()
        {
            // ParseTF
            Assert.IsTrue(SmartBool.isTrue(SmartBool.ParseTF("true")), "SmartBool.ParseTF(true)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.ParseTF("false")), "SmartBool.ParseTF(false)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("unknown")), "SmartBool.ParseTF(unknown)");

            Assert.IsTrue(SmartBool.isTrue(SmartBool.ParseTF("True")), "SmartBool.ParseTF(True)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.ParseTF("False")), "SmartBool.ParseTF(False)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("Unknown")), "SmartBool.ParseTF(Unknown)");

            Assert.IsTrue(SmartBool.isTrue(SmartBool.ParseTF("TRUE")), "SmartBool.ParseTF(TRUE)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.ParseTF("FALSE")), "SmartBool.ParseTF(FALSE)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("UNKNOWN")), "SmartBool.ParseTF(UNKNOWN)");

            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("t")), "SmartBool.ParseTF(t)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("f")), "SmartBool.ParseTF(f)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("T")), "SmartBool.ParseTF(T)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("F")), "SmartBool.ParseTF(F)");

            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("")), "SmartBool.ParseTF()");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.ParseTF("lkdskdks")), "SmartBool.ParseTF(lkdskdks)");

            // Parse
            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("true")), "SmartBool.Parse(true)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("false")), "SmartBool.Parse(false)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("unknown")), "SmartBool.Parse(unknown)");

            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("True")), "SmartBool.Parse(True)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("False")), "SmartBool.Parse(False)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("Unknown")), "SmartBool.Parse(Unknown)");

            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("TRUE")), "SmartBool.Parse(TRUE)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("FALSE")), "SmartBool.Parse(FALSE)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("UNKNOWN")), "SmartBool.Parse(UNKNOWN)");

            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("on")), "SmartBool.Parse(on)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("off")), "SmartBool.Parse(off)");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("yes")), "SmartBool.Parse(yes)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("no")), "SmartBool.Parse(no)");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("y")), "SmartBool.Parse(y)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("n")), "SmartBool.Parse(n)");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.Parse("t")), "SmartBool.Parse(t)");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Parse("f")), "SmartBool.Parse(f)");

            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("")), "SmartBool.Parse()");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("u")), "SmartBool.Parse(u)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("U")), "SmartBool.Parse(U)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("blablabla")), "SmartBool.Parse(blablabla)");

            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("-1")), "SmartBool.Parse(-1)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("0")), "SmartBool.Parse(0)");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Parse("1")), "SmartBool.Parse(1)");
        }
예제 #5
0
        static void opCompatibility()
        {
            bool b1 = true;
            bool b2 = false;

            bool?bn1 = true;
            bool?bn2 = false;
            bool?bn3 = null;

            SmartBool sb11 = true;
            SmartBool sb12 = false;
            SmartBool sb13 = null;

            SmartBool sb21 = SmartBool.True;
            SmartBool sb22 = SmartBool.False;
            SmartBool sb23 = SmartBool.Unknown;

            SmartBool sb;

            sb = b1;
            sb = b2;

            sb = bn1;
            sb = bn2;
            sb = bn3;

            bool b;

            b = (bool)sb11;
            b = (bool)sb12;
            b = (bool)sb13;

            b = (bool)sb21;
            b = (bool)sb22;
            b = (bool)sb23;

            bool?bn;

            bn = sb11;
            bn = sb12;
            bn = sb13;

            bn = sb21;
            bn = sb22;
            bn = sb23;
        }
예제 #6
0
        static void ArraySize()
        {
            int objects_count = 1000;

            long memory1 = GC.GetTotalMemory(true);

            bool[] ai      = new bool[objects_count];
            long   memory2 = GC.GetTotalMemory(true);

            bool?[] ani     = new bool?[objects_count];
            long    memory3 = GC.GetTotalMemory(true);

            SmartBool[] asi     = new SmartBool[objects_count];
            long        memory4 = GC.GetTotalMemory(true);

            // Compiler can optimize and do not allocate arrays if they are not used
            // So we write their lengths

            Console.WriteLine("Array sizes {0}, {1}, {2}", ai.Length, ani.Length, asi.Length);
            Console.WriteLine("Memory for bool \t {0}", memory2 - memory1);
            Console.WriteLine("Memory for bool? \t {0}", memory3 - memory2);
            Console.WriteLine("Memory for SmartBool \t {0}", memory4 - memory3);
        }
예제 #7
0
        public void SmartBool_Logic_Test()
        {
            Assert.IsTrue((bool)SmartBool.True, "SmartBool.True");
            Assert.IsFalse((bool)SmartBool.False, "SmartBool.False");
            Assert.IsFalse((bool)SmartBool.Unknown, "SmartBool.Unknown");

            // !
            Assert.IsTrue(SmartBool.isFalse((!SmartBool.True)), "!SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue((!SmartBool.False)), "!SmartBool.False");
            Assert.IsTrue(SmartBool.isUnknown((!SmartBool.Unknown)), "!SmartBool.Unknown");

            // |
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True | SmartBool.True), "SmartBool.True | SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.False | SmartBool.True), "SmartBool.False | SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True | SmartBool.False), "SmartBool.True | SmartBool.False");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False | SmartBool.False), "SmartBool.False | SmartBool.False");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.Unknown | SmartBool.True), "SmartBool.Unknown | SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True | SmartBool.Unknown), "SmartBool.True | SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown | SmartBool.False), "SmartBool.Unknown | SmartBool.False");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.False | SmartBool.Unknown), "SmartBool.False | SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown | SmartBool.Unknown), "SmartBool.Unknown | SmartBool.Unknown");

            // &
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True & SmartBool.True), "SmartBool.True & SmartBool.True");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False & SmartBool.True), "SmartBool.False & SmartBool.True");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.True & SmartBool.False), "SmartBool.True & SmartBool.False");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False & SmartBool.False), "SmartBool.False & SmartBool.False");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown & SmartBool.True), "SmartBool.Unknown & SmartBool.True");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.True & SmartBool.Unknown), "SmartBool.True & SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Unknown & SmartBool.False), "SmartBool.Unknown & SmartBool.False");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False & SmartBool.Unknown), "SmartBool.False & SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown & SmartBool.Unknown), "SmartBool.Unknown & SmartBool.Unknown");

            // ||
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True || SmartBool.True), "SmartBool.True || SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.False || SmartBool.True), "SmartBool.False || SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True || SmartBool.False), "SmartBool.True || SmartBool.False");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False || SmartBool.False), "SmartBool.False || SmartBool.False");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.Unknown || SmartBool.True), "SmartBool.Unknown || SmartBool.True");
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True || SmartBool.Unknown), "SmartBool.True || SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown || SmartBool.False), "SmartBool.Unknown || SmartBool.False");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.False || SmartBool.Unknown), "SmartBool.False || SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown || SmartBool.Unknown), "SmartBool.Unknown || SmartBool.Unknown");

            // &&
            Assert.IsTrue(SmartBool.isTrue(SmartBool.True && SmartBool.True), "SmartBool.True && SmartBool.True");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False && SmartBool.True), "SmartBool.False && SmartBool.True");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.True && SmartBool.False), "SmartBool.True && SmartBool.False");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False && SmartBool.False), "SmartBool.False && SmartBool.False");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown && SmartBool.True), "SmartBool.Unknown && SmartBool.True");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.True && SmartBool.Unknown), "SmartBool.True && SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.Unknown && SmartBool.False), "SmartBool.Unknown && SmartBool.False");
            Assert.IsTrue(SmartBool.isFalse(SmartBool.False && SmartBool.Unknown), "SmartBool.False && SmartBool.Unknown");
            Assert.IsTrue(SmartBool.isUnknown(SmartBool.Unknown && SmartBool.Unknown), "SmartBool.Unknown && SmartBool.Unknown");

            SmartBool a, b;

            // ==
            a = SmartBool.True; b = SmartBool.True;
            Assert.IsTrue(SmartBool.isTrue(a == b), "SmartBool.True == SmartBool.True");

            a = SmartBool.False; b = SmartBool.True;
            Assert.IsTrue(SmartBool.isFalse(a == b), "SmartBool.False == SmartBool.True");

            a = SmartBool.True; b = SmartBool.False;
            Assert.IsTrue(SmartBool.isFalse(a == b), "SmartBool.True == SmartBool.False");

            a = SmartBool.False; b = SmartBool.False;
            Assert.IsTrue(SmartBool.isTrue(a == b), "SmartBool.False == SmartBool.False");

            a = SmartBool.Unknown; b = SmartBool.True;
            Assert.IsTrue(SmartBool.isUnknown(a == b), "SmartBool.Unknown == SmartBool.True");

            a = SmartBool.True; b = SmartBool.Unknown;
            Assert.IsTrue(SmartBool.isUnknown(a == b), "SmartBool.True == SmartBool.Unknown");

            a = SmartBool.Unknown; b = SmartBool.False;
            Assert.IsTrue(SmartBool.isUnknown(a == b), "SmartBool.Unknown == SmartBool.False");

            a = SmartBool.False; b = SmartBool.Unknown;
            Assert.IsTrue(SmartBool.isUnknown(a == b), "SmartBool.False == SmartBool.Unknown");

            a = SmartBool.Unknown; b = SmartBool.Unknown;
            Assert.IsTrue(SmartBool.isUnknown(a == b), "SmartBool.Unknown == SmartBool.Unknown");


            // !=
            a = SmartBool.True; b = SmartBool.True;
            Assert.IsTrue(SmartBool.isFalse(a != b), "SmartBool.True != SmartBool.True");

            a = SmartBool.False; b = SmartBool.True;
            Assert.IsTrue(SmartBool.isTrue(a != b), "SmartBool.False != SmartBool.True");

            a = SmartBool.True; b = SmartBool.False;
            Assert.IsTrue(SmartBool.isTrue(a != b), "SmartBool.True != SmartBool.False");

            a = SmartBool.False; b = SmartBool.False;
            Assert.IsTrue(SmartBool.isFalse(a != b), "SmartBool.False != SmartBool.False");

            a = SmartBool.Unknown; b = SmartBool.True;
            Assert.IsTrue(SmartBool.isUnknown(a != b), "SmartBool.Unknown != SmartBool.True");

            a = SmartBool.True; b = SmartBool.Unknown;
            Assert.IsTrue(SmartBool.isUnknown(a != b), "SmartBool.True != SmartBool.Unknown");

            a = SmartBool.Unknown; b = SmartBool.False;
            Assert.IsTrue(SmartBool.isUnknown(a != b), "SmartBool.Unknown != SmartBool.False");

            a = SmartBool.False; b = SmartBool.Unknown;
            Assert.IsTrue(SmartBool.isUnknown(a != b), "SmartBool.False != SmartBool.Unknown");

            a = SmartBool.Unknown; b = SmartBool.Unknown;
            Assert.IsTrue(SmartBool.isUnknown(a != b), "SmartBool.Unknown != SmartBool.Unknown");
        }