-
-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);
- });
-});