示例#1
0
        public void CreateUnitFailureCode_SourceFailureMessageIsNull_ExpectFailureCodeIsUnitAndMessageIsEmpty()
        {
            var actual   = Failure.Create(null);
            var expected = new Failure <Unit>(Unit.Value, EmptyString);

            Assert.Equal(expected, actual);
        }
示例#2
0
        public void CreateUnitFailureCode_SourceFailureMessageIsNotNull_ExpectFailureCodeIsUnitAndMessageIsEqualToSource(
            string sourceFailureMessage)
        {
            var actual   = Failure.Create(sourceFailureMessage);
            var expected = new Failure <Unit>(Unit.Value, sourceFailureMessage);

            Assert.Equal(expected, actual);
        }
示例#3
0
        public void Create_SourceFailureMessageIsNull_ExpectFailureCodeIsEqualToSourceAndMessageIsEmpty(
            int sourceFailureCode)
        {
            var actual   = Failure.Create(sourceFailureCode, null);
            var expected = new Failure <int>(sourceFailureCode, EmptyString);

            Assert.Equal(expected, actual);
        }
示例#4
0
        public void Create_SourceFailureMessageIsNotNull_ExpectFailureCodeAndMessageAreEqualToSource(
            SomeFailureCode sourceFailureCode,
            string sourceFailureMessage)
        {
            var actual   = Failure.Create(sourceFailureCode, sourceFailureMessage);
            var expected = new Failure <SomeFailureCode>(sourceFailureCode, sourceFailureMessage);

            Assert.Equal(expected, actual);
        }
示例#5
0
 private static void ValidationWithResultApplicativeFunctor(Func <Choice <decimal, Failure <string> > > readdecimal1, Func <Choice <decimal, Failure <string> > > readdecimal2, Action <decimal> callBackSome, Action <Failure <string> > callBackNone)
 {
     (
         from v1 in readdecimal1()
         join v2 in readdecimal2() on 1 equals 1
         from result in Division.Divide(v1, v2).ToChoice(Failure.Create("Cannot devide by zero."))
         select result * 100
     )
     .Match(callBackSome, callBackNone);
 }
示例#6
0
        private static void ChoiceApplicative()
        {
            Console.WriteLine("Enter two (floating point) number:");

            (
                from v1 in ReadDecimal().ToChoice(Failure.Create(Error.CannotNotParse1StInput))
                join v2 in ReadDecimal().ToChoice(Failure.Create(Error.CannotNotParse2NdInput)) on 1 equals 1
                from result in Divide(v1, v2).ToChoice(Failure.Create(Error.CannotDivideByZero))
                select result
            )
            .Match(
                x => Console.WriteLine("Result = {0}", x),
                errors => errors.ToList().ForEach(x => Console.WriteLine(x.GetDisplayName())));
        }
示例#7
0
        public void ValidationWithResultApplicativeFunctor_RainyDay_Test()
        {
            var d1   = Fun.Create(() => Choice.NewChoice1Of2 <decimal, Failure <string> >(2.5m));
            var ex1  = Fun.Create(() => Choice.NewChoice2Of2 <decimal, Failure <string> >(Failure.Create("Error1")));
            var ex2  = Fun.Create(() => Choice.NewChoice2Of2 <decimal, Failure <string> >(Failure.Create("Error2")));
            var zero = Fun.Create(() => Choice.NewChoice1Of2 <decimal, Failure <string> >(0.0m));

            var errors = new List <string>();
            Action <Failure <string> > callbackNone = errors.AddRange;
            Action <decimal>           callbackSome = x => Assert.True(false);

            ValidationWithResultApplicativeFunctor(d1, ex2, callbackSome, callbackNone);
            Assert.Equal(new[] { "Error2" }, errors);

            errors.Clear();
            ValidationWithResultApplicativeFunctor(ex1, d1, callbackSome, callbackNone);
            Assert.Equal(new[] { "Error1" }, errors);

            errors.Clear();
            ValidationWithResultApplicativeFunctor(ex1, ex2, callbackSome, callbackNone);
            Assert.Equal(new[] { "Error1", "Error2" }, errors);

            errors.Clear();
            ValidationWithResultApplicativeFunctor(d1, zero, callbackSome, callbackNone);
            Assert.Equal(new[] { "Cannot devide by zero." }, errors);
        }
 private static IResult <string, Unit> ToFailure(string message)
 {
     return(Failure.Create <string, Unit>(message));
 }