canonicalNumericIndexString,
findIndexedEntry,
isArrayIndexString,
+ isArraylikeObject,
isCollection,
isConcatSpreadable,
isIntegerIndexString,
- lengthOfArrayLike,
+ lengthOfArraylike,
toIndex,
toLength,
} from "./collection.js";
});
});
+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);
});
});
-describe("lengthOfArrayLike", () => {
+describe("lengthOfArraylike", () => {
it("[[Call]] returns the length", () => {
assertStrictEquals(
- lengthOfArrayLike({ length: 9007199254740991 }),
+ lengthOfArraylike({ length: 9007199254740991 }),
9007199254740991,
);
});
it("[[Call]] returns a non·nan result", () => {
- assertStrictEquals(lengthOfArrayLike({ length: NaN }), 0);
- assertStrictEquals(lengthOfArrayLike({ length: "failure" }), 0);
+ 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);
+ 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);
+ 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 }),
+ lengthOfArraylike({ length: 9007199254740992 }),
9007199254740991,
);
assertStrictEquals(
- lengthOfArrayLike({ length: Infinity }),
+ lengthOfArraylike({ length: Infinity }),
9007199254740991,
);
});