test262/implementation-contributed/javascriptcore/stress/call-apply-exponential-bytecode-size.js
test262-automation e9a5a7f918 [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) (#1620)
* [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)
2018-07-03 15:59:58 -04:00

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