mirror of https://github.com/tc39/test262.git
53 lines
1.2 KiB
JavaScript
53 lines
1.2 KiB
JavaScript
//@ skip if $architecture == "x86"
|
|
//@ if $architecture == "x86" then defaultSpotCheckNoMaximalFlush else defaultRun end
|
|
|
|
function assert(b) {
|
|
if (!b)
|
|
throw new Error("Bad!")
|
|
}
|
|
noInline(assert);
|
|
|
|
let calledGet = false;
|
|
let definedAccessor = false;
|
|
function test() {
|
|
function foo(...rest) {
|
|
return rest;
|
|
}
|
|
noInline(foo);
|
|
|
|
for (let i = 0; i < 10000; i++) {
|
|
const size = 800;
|
|
let arr = new Array(size);
|
|
for (let i = 0; i < size; i++)
|
|
arr[i] = i;
|
|
let result = foo(...arr);
|
|
|
|
assert(result.length === arr.length);
|
|
assert(result.length === size);
|
|
for (let i = 0; i < arr.length; i++) {
|
|
assert(arr[i] === result[i]);
|
|
assert(result[i] === i);
|
|
}
|
|
if (definedAccessor) {
|
|
calledGet = false;
|
|
result[0];
|
|
assert(!calledGet);
|
|
arr[0];
|
|
assert(calledGet);
|
|
|
|
let testArr = [...arr];
|
|
calledGet = false;
|
|
testArr[0];
|
|
assert(!calledGet);
|
|
}
|
|
}
|
|
}
|
|
test();
|
|
|
|
definedAccessor = true;
|
|
Reflect.defineProperty(Array.prototype, "0", {
|
|
get() { calledGet = true; return 0; },
|
|
set(x) { }
|
|
});
|
|
test();
|