mirror of
https://github.com/tc39/test262.git
synced 2025-05-03 14:30:27 +02:00
* [javascriptcore-test262-automation] changes from git@github.com:WebKit/webkit.git at sha 949e26452cfa153a7f4afe593da97e2fe9e1b706 on Tue Jul 03 2018 14:35:15 GMT-0400 (Eastern Daylight Time)
110 lines
4.6 KiB
JavaScript
110 lines
4.6 KiB
JavaScript
// This test seems to require 64 MB for the executable memory pool. As per
|
|
// jit/ExecutableAllocator.cpp, it is 64 MB or above only for arm64 and
|
|
// x86-64.
|
|
//@skip if $architecture != "arm64" and $architecture != "x86-64"
|
|
"use strict";
|
|
|
|
function assert(b) {
|
|
if (!b)
|
|
throw new Error();
|
|
}
|
|
|
|
const inc = (x, y) => { return x + 1; }
|
|
const inc2 = (x, y) => { return y ? y + 1 : x + 1; }
|
|
function bar() {
|
|
return inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, 1)))))))))))))))))))));
|
|
}
|
|
assert(bar() === 22);
|
|
|
|
function randomApplyOrCall(bias, size, dontSpreadBias = 0) {
|
|
let cur = `1`;
|
|
for (let i = 0; i < size; ++i) {
|
|
if (Math.random() >= bias) {
|
|
if (Math.random() >= dontSpreadBias)
|
|
cur = `inc.call(null, ${cur})`;
|
|
else
|
|
cur = `inc.call(...[null, ${cur}])`;
|
|
} else {
|
|
if (Math.random() >= dontSpreadBias)
|
|
cur = `inc.apply(null, [${cur}])`;
|
|
else
|
|
cur = `inc.apply(...[null, [${cur}]])`;
|
|
}
|
|
}
|
|
|
|
if (bias > 0.85) {
|
|
cur = `let random = ${Math.random()}; ${cur}`;
|
|
}
|
|
|
|
return eval(cur);
|
|
}
|
|
|
|
const depth = 100;
|
|
assert(randomApplyOrCall(0, depth) === depth + 1);
|
|
assert(randomApplyOrCall(1, depth) === depth + 1);
|
|
assert(randomApplyOrCall(0, depth, 0) === depth + 1);
|
|
assert(randomApplyOrCall(1, depth, 1) === depth + 1);
|
|
for (let i = 0; i < 1000; ++i) {
|
|
assert(randomApplyOrCall(Math.random(), depth) === depth + 1);
|
|
assert(randomApplyOrCall(Math.random(), depth + 1, Math.random()) === depth + 2);
|
|
}
|
|
|
|
function baz() {
|
|
return inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, 1)))))))))))))))))))),
|
|
inc.call(null, inc.call(null, 1)));
|
|
}
|
|
assert(baz() === 22);
|
|
|
|
function jaz() {
|
|
return inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.apply(null, [inc.call(null, inc.call(null,
|
|
inc.call(null, 1)))]))))))))))))))))),
|
|
inc.call(null, inc.call(null, inc.apply(null, [1]))));
|
|
}
|
|
assert(jaz() === 22);
|
|
|
|
function haz() {
|
|
return inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.apply(null, [inc.call(null, inc.call(null,
|
|
inc.call(null, 1)))]))))))))))))))))),
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.call(null, inc.call(null, inc.call(null,
|
|
inc.call(null, inc.apply(null, [inc.call(null, inc.call(null,
|
|
inc.call(null, 1)))])))))))))))))))))));
|
|
}
|
|
assert(haz() === 22);
|
|
|
|
function foo() {
|
|
return inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.apply(null, [inc2.call(null, inc2.call(null,
|
|
inc2.call(null, 1)))]))))))))))))))))),
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.apply(null, [inc2.call(null, inc2.call(null,
|
|
inc2.call(null, inc2.call(null, inc.call(null, 1)))))])))))))))))))))))));
|
|
}
|
|
assert(foo() === 25);
|