From: Lady Date: Tue, 20 Sep 2022 03:34:38 +0000 (-0700) Subject: toIntegerOrInfinity 🔜 toIntegralNumberOrInfinity X-Git-Tag: 0.3.0~10 X-Git-Url: https://git.ladys.computer/Pisces/commitdiff_plain/d78461254503ec9dab25d0a7518538e9149618e2 toIntegerOrInfinity 🔜 toIntegralNumberOrInfinity This new name is clearer, especially as this function now accepts big·int arguments. --- diff --git a/numeric.js b/numeric.js index 64d9a80..f16308d 100644 --- a/numeric.js +++ b/numeric.js @@ -646,13 +646,28 @@ export const { }; })(); +/** + * Returns the result of converting the provided number to an integral + * number. + * + * ※ This function will never return negative zero. + */ +export const toIntegralNumber = ($) => { + const n = toIntegralNumberOrInfinity($); + return !isFiniteNumber(n) || n == 0 ? 0 : n; +}; + /** * Returns the result of converting the provided number to an integer * or infinity. * + * ※ Unlike the ToIntegerOrInfinity function defined in the Ecmascript + * specification, this function is safe to use with big·ints. However, + * the result will always be a number. + * * ※ This function will never return negative zero. */ -export const toIntegerOrInfinity = ($) => { +export const toIntegralNumberOrInfinity = ($) => { const integer = trunc(toNumber($)); if (isNan(integer) || integer == 0) { // The provided value truncs to nan or (positive or negative) zero. @@ -669,17 +684,6 @@ export const toIntegerOrInfinity = ($) => { } }; -/** - * Returns the result of converting the provided number to an integral - * number. - * - * ※ This function will never return negative zero. - */ -export const toIntegralNumber = ($) => { - const n = toIntegerOrInfinity($); - return !isFiniteNumber(n) || n == 0 ? 0 : n; -}; - /** * Returns the result of converting the provided value to a number. * diff --git a/numeric.test.js b/numeric.test.js index dfb8063..23dbd89 100644 --- a/numeric.test.js +++ b/numeric.test.js @@ -24,8 +24,8 @@ import { sgn, toBigInt, toFloat32, - toIntegerOrInfinity, toIntegralNumber, + toIntegralNumberOrInfinity, toIntN, toNumber, toNumeric, @@ -172,55 +172,58 @@ describe("toIntN", () => { }); }); -describe("toIntegerOrInfinity", () => { +describe("toIntegralNumber", () => { it("[[Call]] converts nan to zero", () => { - assertStrictEquals(toIntegerOrInfinity(NaN), 0); + assertStrictEquals(toIntegralNumber(NaN), 0); }); it("[[Call]] converts negative zero to positive zero", () => { - assertStrictEquals(toIntegerOrInfinity(-0), 0); + assertStrictEquals(toIntegralNumber(-0), 0); }); it("[[Call]] drops the fractional part of negative numbers", () => { - assertStrictEquals(toIntegerOrInfinity(-1.79), -1); + assertStrictEquals(toIntegralNumber(-1.79), -1); }); - it("[[Call]] returns infinity for infinity", () => { - assertStrictEquals(toIntegerOrInfinity(Infinity), Infinity); + it("[[Call]] returns zero for infinity", () => { + assertStrictEquals(toIntegralNumber(Infinity), 0); }); - it("[[Call]] returns negative infinity for negative infinity", () => { - assertStrictEquals(toIntegerOrInfinity(-Infinity), -Infinity); + it("[[Call]] returns zero for negative infinity", () => { + assertStrictEquals(toIntegralNumber(-Infinity), 0); }); it("[[Call]] works with big·ints", () => { - assertStrictEquals(toIntegerOrInfinity(2n), 2); + assertStrictEquals(toIntegralNumber(2n), 2); }); }); -describe("toIntegralNumber", () => { +describe("toIntegralNumberOrInfinity", () => { it("[[Call]] converts nan to zero", () => { - assertStrictEquals(toIntegralNumber(NaN), 0); + assertStrictEquals(toIntegralNumberOrInfinity(NaN), 0); }); it("[[Call]] converts negative zero to positive zero", () => { - assertStrictEquals(toIntegralNumber(-0), 0); + assertStrictEquals(toIntegralNumberOrInfinity(-0), 0); }); it("[[Call]] drops the fractional part of negative numbers", () => { - assertStrictEquals(toIntegralNumber(-1.79), -1); + assertStrictEquals(toIntegralNumberOrInfinity(-1.79), -1); }); - it("[[Call]] returns zero for infinity", () => { - assertStrictEquals(toIntegralNumber(Infinity), 0); + it("[[Call]] returns infinity for infinity", () => { + assertStrictEquals(toIntegralNumberOrInfinity(Infinity), Infinity); }); - it("[[Call]] returns zero for negative infinity", () => { - assertStrictEquals(toIntegralNumber(-Infinity), 0); + it("[[Call]] returns negative infinity for negative infinity", () => { + assertStrictEquals( + toIntegralNumberOrInfinity(-Infinity), + -Infinity, + ); }); it("[[Call]] works with big·ints", () => { - assertStrictEquals(toIntegralNumber(2n), 2); + assertStrictEquals(toIntegralNumberOrInfinity(2n), 2); }); });