X-Git-Url: https://git.ladys.computer/Pisces/blobdiff_plain/e8d0d3ab4f8a844e15873345c0564929c80fdb74..HEAD:/collection.test.js diff --git a/collection.test.js b/collection.test.js index bdded97..c066932 100644 --- a/collection.test.js +++ b/collection.test.js @@ -12,57 +12,11 @@ import { assertSpyCall, assertSpyCalls, assertStrictEquals, - assertThrows, describe, it, spy, } from "./dev-deps.js"; -import { - canonicalNumericIndexString, - findIndexedEntry, - isArrayIndexString, - isArraylikeObject, - isCollection, - isConcatSpreadable, - isIntegerIndexString, - lengthOfArraylike, - toIndex, - toLength, -} from "./collection.js"; - -describe("canonicalNumericIndexString", () => { - it("[[Call]] returns undefined for nonstrings", () => { - assertStrictEquals(canonicalNumericIndexString(1), void {}); - }); - - it("[[Call]] returns undefined for noncanonical strings", () => { - assertStrictEquals(canonicalNumericIndexString(""), void {}); - assertStrictEquals(canonicalNumericIndexString("01"), void {}); - assertStrictEquals( - canonicalNumericIndexString("9007199254740993"), - void {}, - ); - }); - - it('[[Call]] returns -0 for "-0"', () => { - assertStrictEquals(canonicalNumericIndexString("-0"), -0); - }); - - it("[[Call]] returns the corresponding number for canonical strings", () => { - assertStrictEquals(canonicalNumericIndexString("0"), 0); - assertStrictEquals(canonicalNumericIndexString("-0.25"), -0.25); - assertStrictEquals( - canonicalNumericIndexString("9007199254740992"), - 9007199254740992, - ); - assertStrictEquals(canonicalNumericIndexString("NaN"), 0 / 0); - assertStrictEquals(canonicalNumericIndexString("Infinity"), 1 / 0); - assertStrictEquals( - canonicalNumericIndexString("-Infinity"), - -1 / 0, - ); - }); -}); +import { findIndexedEntry, isCollection } from "./collection.js"; describe("findIndexedEntry", () => { it("[[Call]] returns undefined if no matching entry exists", () => { @@ -120,83 +74,6 @@ describe("findIndexedEntry", () => { }); }); -describe("isArrayIndexString", () => { - it("[[Call]] returns false for nonstrings", () => { - assertStrictEquals(isArrayIndexString(1), false); - }); - - it("[[Call]] returns false for noncanonical strings", () => { - assertStrictEquals(isArrayIndexString(""), false); - assertStrictEquals(isArrayIndexString("01"), false); - assertStrictEquals(isArrayIndexString("9007199254740993"), false); - }); - - it("[[Call]] returns false for nonfinite numbers", () => { - assertStrictEquals(isArrayIndexString("NaN"), false); - assertStrictEquals(isArrayIndexString("Infinity"), false); - assertStrictEquals(isArrayIndexString("-Infinity"), false); - }); - - it("[[Call]] returns false for negative numbers", () => { - assertStrictEquals(isArrayIndexString("-0"), false); - assertStrictEquals(isArrayIndexString("-1"), false); - }); - - it("[[Call]] returns false for nonintegers", () => { - assertStrictEquals(isArrayIndexString("0.25"), false); - assertStrictEquals(isArrayIndexString("1.1"), false); - }); - - it("[[Call]] returns false for numbers greater than or equal to -1 >>> 0", () => { - assertStrictEquals(isArrayIndexString(String(-1 >>> 0)), false); - assertStrictEquals( - isArrayIndexString(String((-1 >>> 0) + 1)), - false, - ); - }); - - it("[[Call]] returns true for array lengths less than -1 >>> 0", () => { - assertStrictEquals(isArrayIndexString("0"), true); - assertStrictEquals( - isArrayIndexString(String((-1 >>> 0) - 1)), - true, - ); - }); -}); - -describe("isArraylikeObject", () => { - it("[[Call]] returns false for primitives", () => { - assertStrictEquals(isArraylikeObject("failure"), false); - }); - - it("[[Call]] returns false if length throws", () => { - assertStrictEquals( - isArraylikeObject({ - get length() { - throw void {}; - }, - }), - false, - ); - }); - - it("[[Call]] returns false if length is not a number and cannot be converted to one", () => { - assertStrictEquals(isArraylikeObject({ length: 1n }), false); - }); - - it("[[Call]] returns true if length is convertable to a number", () => { - assertStrictEquals(isArraylikeObject({ length: -0 }), true); - assertStrictEquals(isArraylikeObject({ length: 1 }), true); - assertStrictEquals(isArraylikeObject({ length: -1.25 }), true); - assertStrictEquals( - isArraylikeObject({ length: 9007199254740992 }), - true, - ); - assertStrictEquals(isArraylikeObject({ length: Infinity }), true); - assertStrictEquals(isArraylikeObject({ length: "success" }), true); - }); -}); - describe("isCollection", () => { it("[[Call]] returns false for primitives", () => { assertStrictEquals(isCollection("failure"), false); @@ -263,173 +140,3 @@ describe("isCollection", () => { ); }); }); - -describe("isConcatSpreadable", () => { - it("[[Call]] returns false for primitives", () => { - assertStrictEquals(isConcatSpreadable("failure"), false); - }); - - it("[[Call]] returns false if [Symbol.isConcatSpreadable] is null or false", () => { - assertStrictEquals( - isConcatSpreadable( - Object.assign([], { [Symbol.isConcatSpreadable]: null }), - ), - false, - ); - assertStrictEquals( - isConcatSpreadable( - Object.assign([], { [Symbol.isConcatSpreadable]: false }), - ), - false, - ); - }); - - it("[[Call]] returns true if [Symbol.isConcatSpreadable] is undefined and the object is an array", () => { - assertStrictEquals( - isConcatSpreadable( - Object.assign([], { [Symbol.isConcatSpreadable]: undefined }), - ), - true, - ); - }); - - it("[[Call]] returns true if [Symbol.isConcatSpreadable] is true", () => { - assertStrictEquals( - isConcatSpreadable({ [Symbol.isConcatSpreadable]: true }), - true, - ); - }); -}); - -describe("isIntegerIndexString", () => { - it("[[Call]] returns false for nonstrings", () => { - assertStrictEquals(isIntegerIndexString(1), false); - }); - - it("[[Call]] returns false for noncanonical strings", () => { - assertStrictEquals(isIntegerIndexString(""), false); - assertStrictEquals(isIntegerIndexString("01"), false); - assertStrictEquals( - isIntegerIndexString("9007199254740993"), - false, - ); - }); - - it("[[Call]] returns false for nonfinite numbers", () => { - assertStrictEquals(isIntegerIndexString("NaN"), false); - assertStrictEquals(isIntegerIndexString("Infinity"), false); - assertStrictEquals(isIntegerIndexString("-Infinity"), false); - }); - - it("[[Call]] returns false for negative numbers", () => { - assertStrictEquals(isIntegerIndexString("-0"), false); - assertStrictEquals(isIntegerIndexString("-1"), false); - }); - - it("[[Call]] returns false for nonintegers", () => { - assertStrictEquals(isIntegerIndexString("0.25"), false); - assertStrictEquals(isIntegerIndexString("1.1"), false); - }); - - it("[[Call]] returns false for numbers greater than or equal to 2 ** 53", () => { - assertStrictEquals( - isIntegerIndexString("9007199254740992"), - false, - ); - }); - - it("[[Call]] returns true for safe canonical integer strings", () => { - assertStrictEquals(isIntegerIndexString("0"), true); - assertStrictEquals(isIntegerIndexString("9007199254740991"), true); - }); -}); - -describe("lengthOfArraylike", () => { - it("[[Call]] returns the length", () => { - assertStrictEquals( - lengthOfArraylike({ length: 9007199254740991 }), - 9007199254740991, - ); - }); - - it("[[Call]] returns a non·nan result", () => { - assertStrictEquals(lengthOfArraylike({ length: NaN }), 0); - assertStrictEquals(lengthOfArraylike({ length: "failure" }), 0); - }); - - it("[[Call]] returns an integral result", () => { - assertStrictEquals(lengthOfArraylike({ length: 0.25 }), 0); - assertStrictEquals(lengthOfArraylike({ length: 1.1 }), 1); - }); - - it("[[Call]] returns a result greater than or equal to zero", () => { - assertStrictEquals(lengthOfArraylike({ length: -0 }), 0); - assertStrictEquals(lengthOfArraylike({ length: -1 }), 0); - assertStrictEquals(lengthOfArraylike({ length: -Infinity }), 0); - }); - - it("[[Call]] returns a result less than 2 ** 53", () => { - assertStrictEquals( - lengthOfArraylike({ length: 9007199254740992 }), - 9007199254740991, - ); - assertStrictEquals( - lengthOfArraylike({ length: Infinity }), - 9007199254740991, - ); - }); -}); - -describe("toIndex", () => { - it("[[Call]] returns an index", () => { - assertStrictEquals(toIndex(9007199254740991), 9007199254740991); - }); - - it("[[Call]] returns zero for a zerolike result", () => { - assertStrictEquals(toIndex(NaN), 0); - assertStrictEquals(toIndex("failure"), 0); - assertStrictEquals(toIndex(-0), 0); - }); - - it("[[Call]] rounds down to the nearest integer", () => { - assertStrictEquals(toIndex(0.25), 0); - assertStrictEquals(toIndex(1.1), 1); - }); - - it("[[Call]] throws when provided a negative number", () => { - assertThrows(() => toIndex(-1)); - assertThrows(() => toIndex(-Infinity)); - }); - - it("[[Call]] throws when provided a number greater than or equal to 2 ** 53", () => { - assertThrows(() => toIndex(9007199254740992)); - assertThrows(() => toIndex(Infinity)); - }); -}); - -describe("toLength", () => { - it("[[Call]] returns a length", () => { - assertStrictEquals(toLength(9007199254740991), 9007199254740991); - }); - - it("[[Call]] returns a non·nan result", () => { - assertStrictEquals(toLength(NaN), 0); - assertStrictEquals(toLength("failure"), 0); - }); - - it("[[Call]] returns an integral result", () => { - assertStrictEquals(toLength(0.25), 0); - assertStrictEquals(toLength(1.1), 1); - }); - - it("[[Call]] returns a result greater than or equal to zero", () => { - assertStrictEquals(toLength(-0), 0); - assertStrictEquals(toLength(-1), 0); - assertStrictEquals(toLength(-Infinity), 0); - }); - - it("[[Call]] returns a result less than 2 ** 53", () => { - assertStrictEquals(toLength(9007199254740992), 9007199254740991); - assertStrictEquals(toLength(Infinity), 9007199254740991); - }); -});