diff --git a/src/kiss/Macros.hx b/src/kiss/Macros.hx index 8343ddda..545c51ae 100644 --- a/src/kiss/Macros.hx +++ b/src/kiss/Macros.hx @@ -31,6 +31,10 @@ class Macros { CallExp(Symbol("Prelude.pow"), [exps[1], exps[0]]); }; + macros["min"] = foldMacro("Prelude.minInclusive"); + + macros["max"] = foldMacro("Prelude.maxInclusive"); + return macros; } diff --git a/src/kiss/Prelude.hx b/src/kiss/Prelude.hx index d9e34ec7..96c05902 100644 --- a/src/kiss/Prelude.hx +++ b/src/kiss/Prelude.hx @@ -24,4 +24,24 @@ class Prelude { public static function pow(exponent, base) { return Math.pow(base, exponent); } + + public static function minInclusive(a, b) { + return Math.min(a, b); + } + + public static function minExclusive(a, b) { + return if (a == b) null else Math.min(a, b); + } + + public static function maxInclusive(a, b) { + return Math.max(a, b); + } + + public static function maxExclusive(a, b) { + return if (a == b) null else Math.max(a, b); + } + + public static function areEqual(a, b) { + return if (a == b) a else null; + } } diff --git a/src/test/cases/BasicTestCase.hx b/src/test/cases/BasicTestCase.hx index 50bd81b7..0f92e4d2 100644 --- a/src/test/cases/BasicTestCase.hx +++ b/src/test/cases/BasicTestCase.hx @@ -74,4 +74,12 @@ class BasicTestCase extends Test { function testUnop() { Assert.equals(7, BasicTestCase.myInc); } + + function testMin() { + Assert.equals(1, BasicTestCase.myMin); + } + + function testMax() { + Assert.equals(9, BasicTestCase.myMax); + } } diff --git a/src/test/cases/BasicTestCase.kiss b/src/test/cases/BasicTestCase.kiss index c82b290e..e5d8e945 100644 --- a/src/test/cases/BasicTestCase.kiss +++ b/src/test/cases/BasicTestCase.kiss @@ -38,4 +38,7 @@ (defvar myPower (^ 2 8)) (defvar _myNum 6) -(defvar myInc ++_myNum) \ No newline at end of file +(defvar myInc ++_myNum) + +(defvar myMin (min 9 3 7 1)) +(defvar myMax (max 9 3 7 1)) \ No newline at end of file