From 4bdd2278a77358fe56432b02af25c0c312973290 Mon Sep 17 00:00:00 2001 From: Marco Cetica Date: Wed, 18 Sep 2024 12:03:10 +0200 Subject: [PATCH] Added fromRight/fromLeft methods and unit tests --- .../com/ceticamarco/lambdatonic/Either.java | 22 +++++++++++++++++++ .../com/ceticamarco/lambdatonic/Left.java | 10 +++++++++ .../com/ceticamarco/lambdatonic/Right.java | 10 +++++++++ .../ceticamarco/lambdatonic/LeftTests.java | 10 +++++++++ .../ceticamarco/lambdatonic/RightTests.java | 10 +++++++++ 5 files changed, 62 insertions(+) diff --git a/src/main/java/com/ceticamarco/lambdatonic/Either.java b/src/main/java/com/ceticamarco/lambdatonic/Either.java index f6d1b6d..4004613 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Either.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Either.java @@ -63,4 +63,26 @@ public sealed interface Either permits Left, Right { * @param The return type of the fn function */ Either map(Function fn); + + /** + *

+ * Returns the content of Right or a default value + *

+ * The default value must be of the same type of the Right value + *

+ * @param defaultValue The default value to return if Either is Left + * @return The right value of Either or the default value + */ + R fromRight(R defaultValue); + + /** + *

+ * Returns the content of Left or a default value + *

+ * The default value must be of the same type of the Left value + *

+ * @param defaultValue The default value to return if Either is Right + * @return The left value of Either or the default value + */ + L fromLeft(L defaultValue); } \ No newline at end of file diff --git a/src/main/java/com/ceticamarco/lambdatonic/Left.java b/src/main/java/com/ceticamarco/lambdatonic/Left.java index 8ee74a5..5d70761 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Left.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Left.java @@ -31,4 +31,14 @@ public record Left(L value) implements Either { public Either map(Function fn) { return new Left<>(this.value); } + + @Override + public R fromRight(R defaultValue) { + return defaultValue; + } + + @Override + public L fromLeft(L defaultValue) { + return this.value; + } } \ No newline at end of file diff --git a/src/main/java/com/ceticamarco/lambdatonic/Right.java b/src/main/java/com/ceticamarco/lambdatonic/Right.java index 4bce7e3..d154c28 100644 --- a/src/main/java/com/ceticamarco/lambdatonic/Right.java +++ b/src/main/java/com/ceticamarco/lambdatonic/Right.java @@ -31,4 +31,14 @@ public record Right(R value) implements Either { public Either map(Function fn) { return new Right<>(fn.apply(this.value)); } + + @Override + public R fromRight(R defaultValue) { + return this.value; + } + + @Override + public L fromLeft(L defaultValue) { + return defaultValue; + } } \ No newline at end of file diff --git a/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java b/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java index ac15d70..3610933 100644 --- a/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java +++ b/src/test/java/com/ceticamarco/lambdatonic/LeftTests.java @@ -74,4 +74,14 @@ public class LeftTests { assertEquals(composition, FGMapped); } + + @Test + public void testFromRightOnLeft() { + assertEquals(this.numEither.fromRight(-1), -1); + } + + @Test + public void testFromLeftOnLeft() { + assertEquals(this.resEither.fromLeft(-1), 19); + } } diff --git a/src/test/java/com/ceticamarco/lambdatonic/RightTests.java b/src/test/java/com/ceticamarco/lambdatonic/RightTests.java index f23f9ab..78abf89 100644 --- a/src/test/java/com/ceticamarco/lambdatonic/RightTests.java +++ b/src/test/java/com/ceticamarco/lambdatonic/RightTests.java @@ -74,4 +74,14 @@ public class RightTests { assertEquals(composition, FGMapped); } + + @Test + public void testFromRightOnRight() { + assertEquals(this.numEither.fromRight(-1), 4); + } + + @Test + public void testFromLeftOnRight() { + assertEquals(this.resEither.fromLeft(-1), -1); + } }