public void OptionalTests() { var a = new Option<string>(); Assert.IsFalse(a.IsSet); Assert.Throws<UnexpectedObjectException>(() => a.Unwrap()); Assert.AreEqual("Oi", a.UnwrapOr("Oi")); var b = new Option<string>("Hello, World!"); Assert.IsTrue(b.IsSet); Assert.AreEqual("Hello, World!", b.Unwrap()); Assert.AreEqual("Hello, World!", b.UnwrapOr("Goodbye!")); var c = new Option<int>(5); Assert.AreEqual(42, c.Map((x) => new Option<int>(37 + x)).Unwrap()); var d = new Option<int>(); Assert.IsFalse(d.Map((x) => new Option<int>(x)).IsSet); Assert.AreEqual(42, d.MapOr(42, (x) => x)); Assert.AreEqual(42, d.MapOrElse((x) => x, () => c.MapOr(0, (x) => 37 + x))); Assert.IsFalse(a.And(b).IsSet); Assert.IsTrue(b.And(c).IsSet); Assert.AreEqual(5, b.And(c).Unwrap()); Assert.IsTrue(a.Or(b).IsSet); Assert.AreEqual(b.Or(a), a.Or(b)); Assert.AreEqual(5, d.Or(c).Unwrap()); Assert.AreEqual(5, c.OrElse(() => new Option<int>(42)).Unwrap()); Assert.AreEqual(42, d.OrElse(() => new Option<int>(42)).Unwrap()); }
public void And() { Option <int> opt1 = new Some <int>(1); Assert.Equal(2, opt1.And(new Some <int>(2)).Unwrap()); Assert.Equal(None <int> .Instance, opt1.And(None <int> .Instance)); Option <int> opt2 = None <int> .Instance; Assert.Equal(None <int> .Instance, opt2.And(new Some <int>(2))); Assert.Equal(None <int> .Instance, opt2.And(None <int> .Instance)); }
public void SomeNone() { Option <int> some0 = Option.Some(0), some1 = Option.Some(1), none = Option.None <int>(); Assert.IsFalse(some0.IsNone); Assert.IsTrue(some1.IsSome); Assert.AreEqual(0, some0.Unwrap()); Assert.AreEqual(some0, some0.Or(none)); Assert.AreEqual(some0, some0.Or(some1)); Assert.AreEqual(some0, none.Or(some0)); Assert.AreEqual(none, none.And(some0)); Assert.AreEqual(some1, some0.And(some1)); Assert.AreEqual(none, some0.Xor(some1)); Assert.AreEqual(none, none.Xor(none)); Assert.AreEqual(some0, some0.Xor(none)); Assert.AreEqual(some0, none.Xor(some0)); Assert.AreEqual(0, some1.Match(_ => 0, () => 1)); Assert.AreEqual(1, none.Match(_ => 0, () => 1)); Assert.ThrowsException <Exception>(() => none.Unwrap()); }