public void DifferentReturnErrorIsNotEqual()
        {
            var value = "SomeErr";
            var monad = new ErrorMonad <Int32>(value);

            var asserterVisitor = new AssertErrorVisitor <Int32>
            {
                ExpectedError = "SomeOtherErr",
                AreEqual      = false
            };

            monad.Accept(asserterVisitor);
        }
        public void ReturnErrorIsEqualEvenForInt()
        {
            var value = "error";
            var monad = new ErrorMonad <Int32>(value);

            var asserterVisitor = new AssertErrorVisitor <Int32>
            {
                ExpectedError = value,
                AreEqual      = true
            };

            monad.Accept(asserterVisitor);
        }
示例#3
0
        public void BindPropagatesTheError()
        {
            var errMessage  = "error message";
            var firstMonad  = new ErrorMonad <Int32>(errMessage);
            var secondMonad = firstMonad.Bind(val => new ValueMonad <Int32>(val + 1));

            var asserterVisitor = new AssertErrorVisitor <Int32>
            {
                ExpectedError = errMessage,
                AreEqual      = true
            };

            secondMonad.Accept(asserterVisitor);
        }
示例#4
0
        public void BindPropagatesTheErrorMore()
        {
            var errMessage = "error message";

            var asserterVisitor = new AssertErrorVisitor <Int32>
            {
                ExpectedError = errMessage,
                AreEqual      = true
            };

            new ErrorMonad <Int32>(errMessage)
            .Bind(val => new ValueMonad <Int32>(val + 1))
            .Bind(val => new ValueMonad <Int32>(val + 2))
            .Bind(val => new ValueMonad <Int32>(val + 3))
            .Bind(val => new ValueMonad <Int32>(val + 4))
            .Accept(asserterVisitor);
        }
示例#5
0
        public void BindDoesntExecuteAfterError()
        {
            var errMessage = "error message";

            var asserterVisitor = new AssertErrorVisitor <Int32>
            {
                ExpectedError = errMessage,
                AreEqual      = true
            };

            ErrorMonad <Int32> Fail(Int32 value)
            {
                Assert.Fail();

                return(new ErrorMonad <Int32>("This should never execute"));
            }

            Assert.DoesNotThrow(() => new ErrorMonad <Int32>(errMessage).Bind(Fail));
        }