|
using System;
using IntentionalLogic;
using NUnit.Framework;
namespace IntentionalLogicTest
{
[TestFixture]
public class IntentionalBoolTest
{
[Test]
public void ObjectOperations()
{
IntentionalBool p;
p = IntentionalBool.True;
Assert.IsTrue(p.Equals(IntentionalBool.True));
Assert.IsTrue(p == IntentionalBool.True);
Assert.IsTrue(p != IntentionalBool.False);
Assert.IsTrue(p != IntentionalBool.Unknown);
Assert.IsTrue(p != IntentionalBool.NotUnknown);
Assert.IsTrue(p.ToString() == "True");
Assert.IsTrue(p.IsKnown);
p = IntentionalBool.False;
Assert.IsTrue(p.Equals(IntentionalBool.False));
Assert.IsTrue(p != IntentionalBool.True);
Assert.IsTrue(p == IntentionalBool.False);
Assert.IsTrue(p != IntentionalBool.Unknown);
Assert.IsTrue(p != IntentionalBool.NotUnknown);
Assert.IsTrue(p.ToString() == "False");
Assert.IsTrue(p.IsKnown);
p = IntentionalBool.Unknown;
Assert.IsTrue(p.Equals(IntentionalBool.Unknown));
Assert.IsTrue(p != IntentionalBool.True);
Assert.IsTrue(p != IntentionalBool.False);
Assert.IsTrue(p == IntentionalBool.Unknown);
Assert.IsTrue(p != IntentionalBool.NotUnknown);
Assert.IsTrue(p.ToString() == "Unknown");
Assert.IsFalse(p.IsKnown);
p = IntentionalBool.NotUnknown;
Assert.IsTrue(p.Equals(IntentionalBool.NotUnknown));
Assert.IsTrue(p != IntentionalBool.True);
Assert.IsTrue(p != IntentionalBool.False);
Assert.IsTrue(p != IntentionalBool.Unknown);
Assert.IsTrue(p == IntentionalBool.NotUnknown);
Assert.IsTrue(p.ToString() == "NotUnknown");
Assert.IsFalse(p.IsKnown);
}
[Test]
public void Parse()
{
Assert.IsTrue(IntentionalBool.Parse("True") == IntentionalBool.True);
Assert.IsTrue(IntentionalBool.Parse("False") == IntentionalBool.False);
Assert.IsTrue(IntentionalBool.Parse("Unknown") == IntentionalBool.Unknown);
Assert.IsTrue(IntentionalBool.Parse("NotUnknown") == IntentionalBool.NotUnknown);
}
[Test, ExpectedException(typeof(ArgumentNullException))]
public void ParseArgumentNull()
{
IntentionalBool.Parse(null);
}
[Test, ExpectedException(typeof(ArgumentException))]
public void ParseBadArgument()
{
IntentionalBool.Parse("BadValue");
}
[Test]
public void AndOperator()
{
Assert.IsTrue((IntentionalBool.True & IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True & IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.True & IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.True & IntentionalBool.False) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.Unknown & IntentionalBool.True) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.Unknown & IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.Unknown & IntentionalBool.NotUnknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.Unknown & IntentionalBool.False) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.NotUnknown & IntentionalBool.True) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.NotUnknown & IntentionalBool.Unknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.NotUnknown & IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.NotUnknown & IntentionalBool.False) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False & IntentionalBool.True) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False & IntentionalBool.Unknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False & IntentionalBool.NotUnknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False & IntentionalBool.False) == IntentionalBool.False);
}
[Test]
public void OrOperator()
{
Assert.IsTrue((IntentionalBool.True | IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True | IntentionalBool.Unknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True | IntentionalBool.NotUnknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True | IntentionalBool.False) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown | IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown | IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.Unknown | IntentionalBool.NotUnknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown | IntentionalBool.False) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.NotUnknown | IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.NotUnknown | IntentionalBool.Unknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.NotUnknown | IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.NotUnknown | IntentionalBool.False) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.False | IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.False | IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.False | IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.False | IntentionalBool.False) == IntentionalBool.False);
}
[Test]
public void XorOperator()
{
Assert.IsTrue((IntentionalBool.True ^ IntentionalBool.True) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.True ^ IntentionalBool.Unknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.True ^ IntentionalBool.NotUnknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.True ^ IntentionalBool.False) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown ^ IntentionalBool.True) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.Unknown ^ IntentionalBool.Unknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.Unknown ^ IntentionalBool.NotUnknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown ^ IntentionalBool.False) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.NotUnknown ^ IntentionalBool.True) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.NotUnknown ^ IntentionalBool.Unknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.NotUnknown ^ IntentionalBool.NotUnknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.NotUnknown ^ IntentionalBool.False) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.False ^ IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.False ^ IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.False ^ IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.False ^ IntentionalBool.False) == IntentionalBool.False);
}
[Test]
public void NotOperator()
{
Assert.IsTrue(!IntentionalBool.True == IntentionalBool.False);
Assert.IsTrue(!IntentionalBool.Unknown == IntentionalBool.NotUnknown);
Assert.IsTrue(!IntentionalBool.NotUnknown == IntentionalBool.Unknown);
Assert.IsTrue(!IntentionalBool.False == IntentionalBool.True);
}
[Test]
public void ShortAndOperator()
{
Assert.IsTrue((IntentionalBool.True && IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True && IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.True && IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.True && IntentionalBool.False) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.Unknown && IntentionalBool.True) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.Unknown && IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.Unknown && IntentionalBool.NotUnknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.Unknown && IntentionalBool.False) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.NotUnknown && IntentionalBool.True) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.NotUnknown && IntentionalBool.Unknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.NotUnknown && IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.NotUnknown && IntentionalBool.False) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False && IntentionalBool.True) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False && IntentionalBool.Unknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False && IntentionalBool.NotUnknown) == IntentionalBool.False);
Assert.IsTrue((IntentionalBool.False && IntentionalBool.False) == IntentionalBool.False);
}
[Test]
public void ShortOrOperator()
{
Assert.IsTrue((IntentionalBool.True || IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True || IntentionalBool.Unknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True || IntentionalBool.NotUnknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.True || IntentionalBool.False) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown || IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown || IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.Unknown || IntentionalBool.NotUnknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.Unknown || IntentionalBool.False) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.NotUnknown || IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.NotUnknown || IntentionalBool.Unknown) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.NotUnknown || IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.NotUnknown || IntentionalBool.False) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.False || IntentionalBool.True) == IntentionalBool.True);
Assert.IsTrue((IntentionalBool.False || IntentionalBool.Unknown) == IntentionalBool.Unknown);
Assert.IsTrue((IntentionalBool.False || IntentionalBool.NotUnknown) == IntentionalBool.NotUnknown);
Assert.IsTrue((IntentionalBool.False || IntentionalBool.False) == IntentionalBool.False);
}
[Test]
public void IfStatement()
{
bool success = false;
if (IntentionalBool.True)
{
success = true;
}
Assert.IsTrue(success);
if (IntentionalBool.False)
{
Assert.Fail();
}
if (IntentionalBool.Unknown)
{
Assert.Fail();
}
if (IntentionalBool.NotUnknown)
{
Assert.Fail();
}
}
[Test]
public void BoolCastOperator()
{
Assert.IsTrue(IntentionalBool.True == true); // implicit cast of true to IntentionalBool.True
Assert.IsTrue(IntentionalBool.False == false); // implicit cast of false to IntentionalBool.False
Assert.IsTrue((bool) IntentionalBool.True);
Assert.IsFalse((bool) IntentionalBool.Unknown);
Assert.IsFalse((bool) IntentionalBool.NotUnknown);
Assert.IsFalse((bool) IntentionalBool.False);
}
[Test]
public void Examples()
{
Examples(IntentionalBool.True, IntentionalBool.True);
Examples(IntentionalBool.True, IntentionalBool.Unknown);
Examples(IntentionalBool.True, IntentionalBool.NotUnknown);
Examples(IntentionalBool.True, IntentionalBool.False);
Examples(IntentionalBool.Unknown, IntentionalBool.True);
Examples(IntentionalBool.Unknown, IntentionalBool.Unknown);
Examples(IntentionalBool.Unknown, IntentionalBool.NotUnknown);
Examples(IntentionalBool.Unknown, IntentionalBool.False);
Examples(IntentionalBool.NotUnknown, IntentionalBool.True);
Examples(IntentionalBool.NotUnknown, IntentionalBool.Unknown);
Examples(IntentionalBool.NotUnknown, IntentionalBool.NotUnknown);
Examples(IntentionalBool.NotUnknown, IntentionalBool.False);
Examples(IntentionalBool.False, IntentionalBool.True);
Examples(IntentionalBool.False, IntentionalBool.Unknown);
Examples(IntentionalBool.False, IntentionalBool.NotUnknown);
Examples(IntentionalBool.False, IntentionalBool.False);
}
private void Examples(IntentionalBool p, IntentionalBool q)
{
Assert.IsTrue( (bool) (p == !!p) );
Assert.IsTrue( (bool) (p != !p) );
Assert.IsTrue( (bool) (p | !p) );
Assert.IsTrue( (bool) !(p & !p) );
// &, | and ^ commute
Assert.IsTrue( (p & q) == (q & p) );
Assert.IsTrue( (p | q) == (q | p) );
Assert.IsTrue( (p ^ q) == (q ^ p) );
// short circuit operators have the same semantics as their corresponding basic operators
Assert.IsTrue( (p && q) == (p & q) );
Assert.IsTrue( (p || q) == (p | q) );
// (p & q) => (p | q)
Assert.IsTrue( (bool) ( !(p & q) | (p | q) ) );
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.