diff --git a/src/org/joml/Math.java b/src/org/joml/Math.java index 697a2b0db..421850572 100644 --- a/src/org/joml/Math.java +++ b/src/org/joml/Math.java @@ -378,6 +378,16 @@ public static double max(double a, double b) { return a > b ? a : b; } + public static float clamp(float a, float b, float val){ + return max(a,min(b,val)); + } + public static double clamp(double a, double b, double val) { + return max(a,min(b,val)); + } + public static int clamp(int a, int b, int val) { + return max(a, min(b, val)); + } + public static float toRadians(float angles) { return (float) java.lang.Math.toRadians(angles); } diff --git a/test/org/joml/test/MathTest.java b/test/org/joml/test/MathTest.java index 62f9ceedd..d0e9c7e10 100644 --- a/test/org/joml/test/MathTest.java +++ b/test/org/joml/test/MathTest.java @@ -35,6 +35,23 @@ */ public class MathTest extends TestCase { + public static void testClamp(){ + // Integer value tests + assertEquals(Math.clamp(10,20,0),10); + assertEquals(Math.clamp(10,20,12),12); + assertEquals(Math.clamp(10,20,30),20); + + // Double value tests + assertEquals(Math.clamp(10f,20f,0f),10f,.0001f); + assertEquals(Math.clamp(10f,20f,12f),12f,.0001f); + assertEquals(Math.clamp(10f,20f,30f),20f,.0001f); + + // Float value tests + assertEquals(Math.clamp(10.0,20.0,0.0),10.0,.0001); + assertEquals(Math.clamp(10.0,20.0,12.0),12.0,.0001); + assertEquals(Math.clamp(10.0,20.0,30.0),20.0,.0001); + } + public static void testDoubleVecLength() { // Integer value tests assertEquals(5., Vector2d.length(4, 3), .0001);