diff --git a/Application/iSynaptic.Commons/Maybe.cs b/Application/iSynaptic.Commons/Maybe.cs index 0ef5d31..f5d2462 100644 --- a/Application/iSynaptic.Commons/Maybe.cs +++ b/Application/iSynaptic.Commons/Maybe.cs @@ -197,8 +197,26 @@ public static implicit operator Maybe(Maybe value) { return new Maybe(); } + + public static bool operator true(Maybe self) + { + return self.HasValue; + } + + public static bool operator false(Maybe self) + { + throw new NotImplementedException("Only used for & operator, which isn't implemented"); + } + + public static Maybe operator |(Maybe self, Maybe other) + { + return self.HasValue ? self : other; + } } + public static class MaybeOperators + {} + public static class Maybe { #region Defer Operator diff --git a/Testing/iSynaptic.Commons.UnitTests/MaybeTests.cs b/Testing/iSynaptic.Commons.UnitTests/MaybeTests.cs index 69b502b..93cf5d5 100644 --- a/Testing/iSynaptic.Commons.UnitTests/MaybeTests.cs +++ b/Testing/iSynaptic.Commons.UnitTests/MaybeTests.cs @@ -1270,6 +1270,62 @@ public void Squash_WithValue_ReturnsValue() Assert.AreEqual(42, result.Value); } + [Test] + public void BoolOperators_NonNullMabesAreTrue() + { + Maybe item = 7.ToMaybe(); + if(item) + Assert.Pass(); + else + Assert.Fail(); + } + + [Test] + public void BoolOperators_NullMabesAreFalse() + { + var item = Maybe.NoValue; + if(item) + Assert.Fail(); + } + + [Test] + public void BoolOperators_InitializationFromDefaultTo7Is7() + { + var item = default(Maybe); + item |= 7.ToMaybe(); + Assert.That(item.Value, Is.EqualTo(7)); + } + + [Test] + public void BoolOperators_InitializationFromNoneTo7Is7() + { + Maybe item = Maybe.NoValue; + item |= 7.ToMaybe(); + Assert.That(item.Value, Is.EqualTo(7)); + } + + [Test] + public void BoolOperators_InitializationFrom7ToNoneIs7() + { + var item = 7.ToMaybe(); + item |= Maybe.NoValue; + Assert.That(item.Value, Is.EqualTo(7)); + } + + [Test] + public void BoolOperators_7OrNone_7() + { + Assert.That(7.ToMaybe() | Maybe.NoValue, Is.EqualTo(7.ToMaybe())); + Assert.That(7.ToMaybe() || Maybe.NoValue, Is.EqualTo(7.ToMaybe())); + } + + [Test] + public void BoolOperators_NoneOr7_7() + { + Assert.That(Maybe.NoValue | 7.ToMaybe(), Is.EqualTo(7.ToMaybe())); + Assert.That(Maybe.NoValue || 7.ToMaybe(), Is.EqualTo(7.ToMaybe())); + } + public class Base{} public class Derived : Base{} }