2021-07-06 15:45:54 +00:00
|
|
|
test("numeric properties", () => {
|
|
|
|
const i32Max = 2 ** 31 - 1;
|
|
|
|
const u32Max = 2 ** 32 - 1;
|
|
|
|
const o = {
|
|
|
|
[-1]: "foo",
|
|
|
|
0: "foo",
|
|
|
|
1: "foo",
|
|
|
|
[i32Max - 1]: "foo",
|
|
|
|
[i32Max]: "foo",
|
|
|
|
[i32Max + 1]: "foo",
|
|
|
|
[u32Max - 1]: "foo",
|
|
|
|
[u32Max]: "foo",
|
|
|
|
[u32Max + 1]: "foo",
|
|
|
|
};
|
|
|
|
// Numeric properties come first in Object.getOwnPropertyNames()'s output,
|
|
|
|
// which means we can test what each is treated as internally.
|
|
|
|
expect(Object.getOwnPropertyNames(o)).toEqual([
|
|
|
|
// Numeric properties
|
|
|
|
"0",
|
|
|
|
"1",
|
|
|
|
"2147483646",
|
|
|
|
"2147483647",
|
|
|
|
"2147483648",
|
|
|
|
"4294967294",
|
|
|
|
// Non-numeric properties
|
|
|
|
"-1",
|
|
|
|
"4294967295", // >= 2^32 - 1
|
|
|
|
"4294967296", // >= 2^32 - 1
|
|
|
|
]);
|
|
|
|
});
|
2022-08-19 22:24:30 +00:00
|
|
|
|
|
|
|
test("big int properties", () => {
|
|
|
|
const o = {
|
|
|
|
[-1n]: "foo",
|
|
|
|
0n: "foo",
|
|
|
|
1n: "foo",
|
|
|
|
[12345678901n]: "foo",
|
|
|
|
[4294967294n]: "foo",
|
|
|
|
[4294967295n]: "foo",
|
|
|
|
};
|
|
|
|
// Numeric properties come first in Object.getOwnPropertyNames()'s output,
|
|
|
|
// which means we can test what each is treated as internally.
|
|
|
|
expect(Object.getOwnPropertyNames(o)).toEqual([
|
|
|
|
// Numeric properties
|
|
|
|
"0",
|
|
|
|
"1",
|
|
|
|
"4294967294",
|
|
|
|
// Non-numeric properties
|
|
|
|
"-1",
|
|
|
|
"12345678901", // >= 2^32 - 1
|
|
|
|
"4294967295", // >= 2^32 - 1
|
|
|
|
]);
|
|
|
|
});
|