X-Git-Url: https://git.ladys.computer/Pisces/blobdiff_plain/5af99cb7def7f5a9b19db6a8e214920dd233113d..6e6d4e3261c1c943fe44fa9e381bcf8bf1441fd6:/numeric.test.js?ds=sidebyside diff --git a/numeric.test.js b/numeric.test.js index e82e04b..27776cd 100644 --- a/numeric.test.js +++ b/numeric.test.js @@ -19,15 +19,33 @@ import { clz32, max, min, + NEGATIVE_ZERO, + POSITIVE_ZERO, sgn, toBigInt, + toExponentialNotation, + toFixedDecimalNotation, toFloat32, + toIntegralNumber, + toIntegralNumberOrInfinity, toIntN, toNumber, toNumeric, toUintN, } from "./numeric.js"; +describe("NEGATIVE_ZERO", () => { + it("[[Get]] is negative zero", () => { + assertStrictEquals(NEGATIVE_ZERO, -0); + }); +}); + +describe("POSITIVE_ZERO", () => { + it("[[Get]] is positive zero", () => { + assertStrictEquals(POSITIVE_ZERO, 0); + }); +}); + describe("abs", () => { it("[[Call]] returns the absolute value", () => { assertStrictEquals(abs(-1), 1); @@ -125,6 +143,53 @@ describe("toBigInt", () => { }); }); +describe("toExponentialNotation", () => { + it("[[Call]] converts to exponential notation", () => { + assertStrictEquals(toExponentialNotation(231), "2.31e+2"); + }); + + it("[[Call]] works with big·ints", () => { + assertStrictEquals( + toExponentialNotation(9007199254740993n), + "9.007199254740993e+15", + ); + }); + + it("[[Call]] respects the specified number of fractional digits", () => { + assertStrictEquals( + toExponentialNotation(.00000000642, 3), + "6.420e-9", + ); + assertStrictEquals(toExponentialNotation(.00691, 1), "6.9e-3"); + assertStrictEquals(toExponentialNotation(.00685, 1), "6.9e-3"); + assertStrictEquals(toExponentialNotation(.004199, 2), "4.20e-3"); + assertStrictEquals( + toExponentialNotation(6420000000n, 3), + "6.420e+9", + ); + assertStrictEquals(toExponentialNotation(6910n, 1), "6.9e+3"); + assertStrictEquals(toExponentialNotation(6850n, 1), "6.9e+3"); + assertStrictEquals(toExponentialNotation(4199n, 2), "4.20e+3"); + }); +}); + +describe("toFixedDecimalNotation", () => { + it("[[Call]] converts to fixed decimal notation", () => { + assertStrictEquals(toFixedDecimalNotation(69.4199, 3), "69.420"); + }); + + it("[[Call]] works with big·ints", () => { + assertStrictEquals( + toFixedDecimalNotation(9007199254740993n), + "9007199254740993", + ); + assertStrictEquals( + toFixedDecimalNotation(9007199254740993n, 2), + "9007199254740993.00", + ); + }); +}); + describe("toFloat32", () => { it("[[Call]] returns the 32‐bit floating‐point representation", () => { assertStrictEquals( @@ -149,6 +214,66 @@ describe("toIntN", () => { it("[[Call]] works with numbers", () => { assertStrictEquals(toIntN(2, 7), -1); }); + + it("[[Call]] works with non‐integers", () => { + assertStrictEquals(toIntN(2, 7.21), -1); + assertStrictEquals(toIntN(2, Infinity), 0); + }); +}); + +describe("toIntegralNumber", () => { + it("[[Call]] converts nan to zero", () => { + assertStrictEquals(toIntegralNumber(NaN), 0); + }); + + it("[[Call]] converts negative zero to positive zero", () => { + assertStrictEquals(toIntegralNumber(-0), 0); + }); + + it("[[Call]] drops the fractional part of negative numbers", () => { + assertStrictEquals(toIntegralNumber(-1.79), -1); + }); + + it("[[Call]] returns zero for infinity", () => { + assertStrictEquals(toIntegralNumber(Infinity), 0); + }); + + it("[[Call]] returns zero for negative infinity", () => { + assertStrictEquals(toIntegralNumber(-Infinity), 0); + }); + + it("[[Call]] works with big·ints", () => { + assertStrictEquals(toIntegralNumber(2n), 2); + }); +}); + +describe("toIntegralNumberOrInfinity", () => { + it("[[Call]] converts nan to zero", () => { + assertStrictEquals(toIntegralNumberOrInfinity(NaN), 0); + }); + + it("[[Call]] converts negative zero to positive zero", () => { + assertStrictEquals(toIntegralNumberOrInfinity(-0), 0); + }); + + it("[[Call]] drops the fractional part of negative numbers", () => { + assertStrictEquals(toIntegralNumberOrInfinity(-1.79), -1); + }); + + it("[[Call]] returns infinity for infinity", () => { + assertStrictEquals(toIntegralNumberOrInfinity(Infinity), Infinity); + }); + + it("[[Call]] returns negative infinity for negative infinity", () => { + assertStrictEquals( + toIntegralNumberOrInfinity(-Infinity), + -Infinity, + ); + }); + + it("[[Call]] works with big·ints", () => { + assertStrictEquals(toIntegralNumberOrInfinity(2n), 2); + }); }); describe("toNumber", () => { @@ -189,4 +314,9 @@ describe("toUintN", () => { it("[[Call]] works with numbers", () => { assertStrictEquals(toUintN(2, 7), 3); }); + + it("[[Call]] works with non‐integers", () => { + assertStrictEquals(toUintN(2, 7.21), 3); + assertStrictEquals(toUintN(2, Infinity), 0); + }); });