diff --git a/CHANGELOG.md b/CHANGELOG.md index fc125acd..87df9792 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ ## Next version +### API changes + +- Do not return `Infinity` or `-Infinity` when passing an empty array to `Math.Int.minMany`, `Math.Int.maxMany`, `Math.minMany` and `Math.maxMany` functions. https://github.com/rescript-association/rescript-core/pull/82 + + ## 0.5.0 ### API changes diff --git a/src/Core__Math.mjs b/src/Core__Math.mjs index 87e83ffa..87892f8c 100644 --- a/src/Core__Math.mjs +++ b/src/Core__Math.mjs @@ -1,12 +1,50 @@ // Generated by ReScript, PLEASE EDIT WITH CARE +import * as Caml_splice_call from "rescript/lib/es6/caml_splice_call.js"; var Constants = {}; -var Int = {}; +function minMany(arr) { + if (arr.length !== 0) { + return Caml_splice_call.spliceApply(Math.min, [arr]); + } else { + return 0; + } +} + +function maxMany(arr) { + if (arr.length !== 0) { + return Caml_splice_call.spliceApply(Math.max, [arr]); + } else { + return 0; + } +} + +var Int = { + minMany: minMany, + maxMany: maxMany +}; + +function minMany$1(arr) { + if (arr.length !== 0) { + return Caml_splice_call.spliceApply(Math.min, [arr]); + } else { + return 0.0; + } +} + +function maxMany$1(arr) { + if (arr.length !== 0) { + return Caml_splice_call.spliceApply(Math.max, [arr]); + } else { + return 0.0; + } +} export { Constants , Int , + minMany$1 as minMany, + maxMany$1 as maxMany, } /* No side effect */ diff --git a/src/Core__Math.res b/src/Core__Math.res index a468332b..e2b420dc 100644 --- a/src/Core__Math.res +++ b/src/Core__Math.res @@ -15,8 +15,18 @@ module Int = { @val external imul: (int, int) => int = "Math.imul" @val external min: (int, int) => int = "Math.min" @variadic @val external minMany: array => int = "Math.min" + let minMany = arr => + switch arr { + | [] => 0 + | arr => minMany(arr) + } @val external max: (int, int) => int = "Math.max" @variadic @val external maxMany: array => int = "Math.max" + let maxMany = arr => + switch arr { + | [] => 0 + | arr => maxMany(arr) + } @val external pow: (int, ~exp: int) => int = "Math.pow" @val external sign: int => int = "Math.sign" } @@ -45,8 +55,18 @@ module Int = { @val external log2: float => float = "Math.log2" @val external min: (float, float) => float = "Math.min" @variadic @val external minMany: array => float = "Math.min" +let minMany = arr => + switch arr { + | [] => 0.0 + | arr => minMany(arr) + } @val external max: (float, float) => float = "Math.max" @variadic @val external maxMany: array => float = "Math.max" +let maxMany = arr => + switch arr { + | [] => 0.0 + | arr => maxMany(arr) + } @val external pow: (float, ~exp: float) => float = "Math.pow" @val external random: unit => float = "Math.random" @val external round: float => float = "Math.round" diff --git a/src/Core__Math.resi b/src/Core__Math.resi index eaecfb46..296ebbfd 100644 --- a/src/Core__Math.resi +++ b/src/Core__Math.resi @@ -209,12 +209,10 @@ module Int: { ```rescript Math.Int.minMany([1, 2]) // 1 Math.Int.minMany([-1, -2]) // -2 - Math.Int.minMany([])->Float.isFinite // false + Math.Int.minMany([]) // 0 ``` */ - @variadic - @val - external minMany: array => int = "Math.min" + let minMany: array => int /** `max(a, b)` returns the maximum of its two integer arguments. @@ -240,12 +238,10 @@ module Int: { ```rescript Math.Int.maxMany([1, 2]) // 2 Math.Int.maxMany([-1, -2]) // -1 - Math.Int.maxMany([])->Float.isFinite // false + Math.Int.maxMany([]) // 0 ``` */ - @variadic - @val - external maxMany: array => int = "Math.max" + let maxMany: array => int /** `pow(a, ~exp)` raises the given base `a` to the given exponent `exp`. @@ -650,12 +646,10 @@ See [`Math.min`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referen ```rescript Math.minMany([1.0, 2.0]) // 1.0 Math.minMany([-1.0, -2.0]) // -2.0 -Math.minMany([])->Float.isFinite // false +Math.minMany([]) // 0.0 ``` */ -@variadic -@val -external minMany: array => float = "Math.min" +let minMany: array => float /** `max(a, b)` returns the maximum of its two float arguments. @@ -681,12 +675,10 @@ See [`Math.max`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Referen ```rescript Math.maxMany([1.0, 2.0]) // 2.0 Math.maxMany([-1.0, -2.0]) // -1.0 -Math.maxMany([])->Float.isFinite // false +Math.maxMany([]) // 0.0 ``` */ -@variadic -@val -external maxMany: array => float = "Math.max" +let maxMany: array => float /** `pow(a, ~exp)` raises the given base `a` to the given exponent `exp`.