Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions Application/iSynaptic.Commons/Maybe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -197,8 +197,26 @@ public static implicit operator Maybe<T>(Maybe<Unit> value)
{
return new Maybe<T>();
}

public static bool operator true(Maybe<T> self)
{
return self.HasValue;
}

public static bool operator false(Maybe<T> self)
{
throw new NotImplementedException("Only used for & operator, which isn't implemented");
}

public static Maybe<T> operator |(Maybe<T> self, Maybe<T> other)
{
return self.HasValue ? self : other;
}
}

public static class MaybeOperators
{}

public static class Maybe
{
#region Defer Operator
Expand Down
56 changes: 56 additions & 0 deletions Testing/iSynaptic.Commons.UnitTests/MaybeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1270,6 +1270,62 @@ public void Squash_WithValue_ReturnsValue()
Assert.AreEqual(42, result.Value);
}

[Test]
public void BoolOperators_NonNullMabesAreTrue()
{
Maybe<int> item = 7.ToMaybe();
if(item)
Assert.Pass();
else
Assert.Fail();
}

[Test]
public void BoolOperators_NullMabesAreFalse()
{
var item = Maybe<int>.NoValue;
if(item)
Assert.Fail();
}

[Test]
public void BoolOperators_InitializationFromDefaultTo7Is7()
{
var item = default(Maybe<int>);
item |= 7.ToMaybe();
Assert.That(item.Value, Is.EqualTo(7));
}

[Test]
public void BoolOperators_InitializationFromNoneTo7Is7()
{
Maybe<int> item = Maybe.NoValue;
item |= 7.ToMaybe();
Assert.That(item.Value, Is.EqualTo(7));
}

[Test]
public void BoolOperators_InitializationFrom7ToNoneIs7()
{
var item = 7.ToMaybe();
item |= Maybe<int>.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{}
}
Expand Down