blob: 4ca72ec4626e410ef5a7a6753b773db436dccd6c [file] [log] [blame]
function assert(b) {
if (!b)
throw new Error("Bad assertion")
}
noInline(assert);
function test(f, count = 1000) {
for (let i = 0; i < count; i++)
f();
}
function foo(a = function() { return c; }, ...[b = function() { return a; }, ...c]) {
assert(b()() === c);
assert(a() === c);
}
test(function() {
foo(undefined, undefined, {});
});
function bar(a, ...{c}) {
return c;
}
test(function() {
assert(bar(10, 20, 30) === undefined);
});
function baz(...[{b}, {b: c}, ...d]) {
return [b, c, d];
}
test(function() {
let o = {};
let result = baz({b: 20}, {b: 30}, 40, o);
assert(result.length === 3);
assert(result[0] === 20);
assert(result[1] === 30);
assert(result[2].length === 2);
assert(result[2][0] === 40);
assert(result[2][1] === o);
});
function jaz(...[...[...c]]) {
return c;
}
test(function() {
let result = jaz(10, 20);
assert(result.length === 2);
assert(result[0] === 10);
assert(result[1] === 20);
});
let raz = (a, ...[b, ...c]) => {
return [b, ...c];
};
test(function() {
let result = raz(10, 20, 30, 40);
assert(result.length === 3);
assert(result[0] === 20);
assert(result[1] === 30);
assert(result[2] === 40);
});
Array.prototype.c = 500;
test(function() {
assert(bar(10, 20, 30) === 500);
});
raz = (a, ...[b = function() { return c; }, ...c]) => {
return b();
};
test(function() {
let result = raz(undefined, undefined, 20, 30);
assert(result.length === 2);
assert(result[0] === 20);
assert(result[1] === 30);
});
raz = (a, ...[b = function() { return c; }, d = b(), ...c]) => { };
test(function() {
let threw = false;
try {
raz(undefined, undefined, undefined, undefined);
} catch(e) {
threw = e instanceof ReferenceError; }
assert(threw);
});