public void CreateUnitFailureCode_SourceFailureMessageIsNull_ExpectFailureCodeIsUnitAndMessageIsEmpty() { var actual = Failure.Create(null); var expected = new Failure <Unit>(Unit.Value, EmptyString); Assert.Equal(expected, actual); }
public void CreateUnitFailureCode_SourceFailureMessageIsNotNull_ExpectFailureCodeIsUnitAndMessageIsEqualToSource( string sourceFailureMessage) { var actual = Failure.Create(sourceFailureMessage); var expected = new Failure <Unit>(Unit.Value, sourceFailureMessage); Assert.Equal(expected, actual); }
public void Create_SourceFailureMessageIsNull_ExpectFailureCodeIsEqualToSourceAndMessageIsEmpty( int sourceFailureCode) { var actual = Failure.Create(sourceFailureCode, null); var expected = new Failure <int>(sourceFailureCode, EmptyString); Assert.Equal(expected, actual); }
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); }
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); }
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()))); }
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)); }