diff --git a/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/clampfunction/Clamp.java b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/clampfunction/Clamp.java new file mode 100644 index 0000000000..4c62c0560e --- /dev/null +++ b/core-java-modules/core-java-lang-math-3/src/main/java/com/baeldung/clampfunction/Clamp.java @@ -0,0 +1,23 @@ +package com.baeldung.clampfunction; + +public class Clamp { + + public int clamp(int value, int min, int max) { + return Math.max(min, Math.min(max, value)); + } + + public double clamp(double value, double min, double max) { + return Math.max(min, Math.min(max, value)); + } + + public static > T clamp(T value, T min, T max) { + if (value.compareTo(min) < 0) { + return min; + } else if (value.compareTo(max) > 0) { + return max; + } else { + return value; + } + } + +} diff --git a/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/clampfunction/ClampFunctionUnitTest.java b/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/clampfunction/ClampFunctionUnitTest.java new file mode 100644 index 0000000000..7bcf676dd0 --- /dev/null +++ b/core-java-modules/core-java-lang-math-3/src/test/java/com/baeldung/clampfunction/ClampFunctionUnitTest.java @@ -0,0 +1,40 @@ +package com.baeldung.clampfunction; + +import static org.junit.jupiter.api.Assertions.*; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class ClampFunctionUnitTest { + + Clamp clampValue = new Clamp(); + + @Test + public void givenValueOutsideRange_whenClamp_thenReturnLowerValue() { + assertEquals(15, clampValue.clamp(10, 15, 35)); + } + + @Test + public void givenValueWithinRange_whenClamp_thenReturnValue() { + assertEquals(20, clampValue.clamp(20, 15, 35)); + } + + @Test + public void givenValueOutsideRange_whenClamp_thenReturnMaximumValue() { + assertEquals(35, clampValue.clamp(50, 15, 35)); + } + + @Test + public void givenDoubleValueOutsideRange_whenClamp_thenReturnMaximumValue() { + assertEquals(60.5, clampValue.clamp(75.6, 25.5, 60.5)); + } + + /* + * This method uses the clamp() method introduced in Java 21 + @Test + public void givenValueWithinRange_whenClamp_thenReturnValue() { + assertEquals(20, Math.clamp(20, 67,98)); + } + */ + +}