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(); }
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(); }
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"); } }
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)"); }
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; }
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); }
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"); }