diff --git a/source/Monads/Result.cs b/source/Monads/Result.cs index 029052d..f7a414f 100644 --- a/source/Monads/Result.cs +++ b/source/Monads/Result.cs @@ -119,5 +119,14 @@ public Result Map(TSuccessToMap successT => IsFailed ? new(Failure) : new(successToMap); + + /// Creates a new result with a different expected success. + /// Creates the expected success to map. + /// Type of expected success to map. + /// A new result with a different expected success. + public Result Map(Func createSuccessToMap) + => IsFailed + ? new(Failure) + : new(createSuccessToMap(Success)); } #pragma warning restore CA1062 diff --git a/test/unit/Monads/ResultTest.cs b/test/unit/Monads/ResultTest.cs index 77ea41d..d327617 100644 --- a/test/unit/Monads/ResultTest.cs +++ b/test/unit/Monads/ResultTest.cs @@ -323,6 +323,8 @@ public void Ensure_SuccessfulResultPlusCreateAuxiliaryPlusFalsePredicatePlusCrea #region Map + #region Overload + [Fact] [Trait(root, map)] public void Map_FailedResultPlusSuccessToMap_FailedResult() @@ -355,4 +357,42 @@ public void Map_SuccessfulResultPlusSuccessToMap_SuccessfulResult() } #endregion + + #region Overload + + [Fact] + [Trait(root, map)] + public void Map_FailedResultPlusCreateSuccessToMap_FailedResult() + { + //Arrange + const string expectedFailure = ResultFixture.Failure; + Func createSuccessToMap = static _ => ResultFixture.SuccessToMap; + + //Act + Result actualResult = ResultMother.Fail(expectedFailure) + .Map(createSuccessToMap); + + //Assert + ResultAsserter.AreFailed(expectedFailure, actualResult); + } + + [Fact] + [Trait(root, map)] + public void Map_SuccessfulResultPlusCreateSuccessToMap_SuccessfulResult() + { + //Arrange + Start expectedSuccess = ResultFixture.SuccessToMap; + Func createSuccessToMap = _ => expectedSuccess; + + //Act + Result actualResult = ResultMother.Succeed() + .Map(createSuccessToMap); + + //Assert + ResultAsserter.AreSuccessful(expectedSuccess, actualResult); + } + + #endregion + + #endregion }