Пример #1
0
    public void MayElse()
    {
        var n = May <int> .NoValue;
        var y = new May <int>(1);
        Func <May <int> > throwsM = () => { throw new ArgumentException(); };
        Func <int>        throwsT = () => { throw new ArgumentException(); };

        // else T
        Assert.IsTrue(n.Else(2) == 2);
        Assert.IsTrue(y.Else(2) == 1);

        // else Func<T>
        Assert.IsTrue(n.Else(() => 2) == 2);
        Assert.IsTrue(y.Else(() => 2) == 1);
        Assert.IsTrue(y.Else(throwsT) == y);
        TestUtil.AssertThrows <ArgumentException>(() => n.Else(throwsT));

        // else May<T>
        Assert.IsTrue(n.Else(y) == y);
        Assert.IsTrue(y.Else(n) == y);
        Assert.IsTrue(n.Else(2.Maybe()) == 2.Maybe());
        Assert.IsTrue(y.Else(2.Maybe()) == y);
        Assert.IsTrue(n.Else(May.NoValue) == May.NoValue);
        Assert.IsTrue(y.Else(May.NoValue) == y);

        // else Func<May<T>>
        Assert.IsTrue(n.Else(() => y) == y);
        Assert.IsTrue(y.Else(() => n) == y);
        Assert.IsTrue(n.Else(() => 2.Maybe()) == 2.Maybe());
        Assert.IsTrue(y.Else(() => 2.Maybe()) == y);
        Assert.IsTrue(n.Else(() => new May <int>()) == May.NoValue);
        Assert.IsTrue(y.Else(() => new May <int>()) == y);
        Assert.IsTrue(y.Else(throwsM) == y);
        TestUtil.AssertThrows <ArgumentException>(() => n.Else(throwsM));

        // else default
        Assert.IsTrue(n.ElseDefault() == 0);
        Assert.IsTrue(y.ElseDefault() == 1);

        // else action
        var x = 0;

        y.ElseDo(() => { x += 1; });
        Assert.IsTrue(x == 0);
        n.ElseDo(() => { x += 1; });
        Assert.IsTrue(x == 1);
    }
Пример #2
0
    public void MayElse()
    {
        var n = May<int>.NoValue;
        var y = new May<int>(1);
        Func<May<int>> throwsM = () => { throw new ArgumentException(); };
        Func<int> throwsT = () => { throw new ArgumentException(); };

        // else T
        Assert.IsTrue(n.Else(2) == 2);
        Assert.IsTrue(y.Else(2) == 1);

        // else Func<T>
        Assert.IsTrue(n.Else(() => 2) == 2);
        Assert.IsTrue(y.Else(() => 2) == 1);
        Assert.IsTrue(y.Else(throwsT) == y);
        TestUtil.AssertThrows<ArgumentException>(() => n.Else(throwsT));

        // else May<T>
        Assert.IsTrue(n.Else(y) == y);
        Assert.IsTrue(y.Else(n) == y);
        Assert.IsTrue(n.Else(2.Maybe()) == 2.Maybe());
        Assert.IsTrue(y.Else(2.Maybe()) == y);
        Assert.IsTrue(n.Else(May.NoValue) == May.NoValue);
        Assert.IsTrue(y.Else(May.NoValue) == y);

        // else Func<May<T>>
        Assert.IsTrue(n.Else(() => y) == y);
        Assert.IsTrue(y.Else(() => n) == y);
        Assert.IsTrue(n.Else(() => 2.Maybe()) == 2.Maybe());
        Assert.IsTrue(y.Else(() => 2.Maybe()) == y);
        Assert.IsTrue(n.Else(() => new May<int>()) == May.NoValue);
        Assert.IsTrue(y.Else(() => new May<int>()) == y);
        Assert.IsTrue(y.Else(throwsM) == y);
        TestUtil.AssertThrows<ArgumentException>(() => n.Else(throwsM));

        // else default
        Assert.IsTrue(n.ElseDefault() == 0);
        Assert.IsTrue(y.ElseDefault() == 1);

        // else action
        var x = 0;
        y.ElseDo(() => { x += 1; });
        Assert.IsTrue(x == 0);
        n.ElseDo(() => { x += 1; });
        Assert.IsTrue(x == 1);
    }