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,
- );
- });
-});
-
describe("findIndexedEntry", () => {
it("[[Call]] returns undefined if no matching entry exists", () => {
assertStrictEquals(findIndexedEntry([], () => true), void {});
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);
- });
-});