function testNumBoundArgsGuard() {
function f(a, b, c, d, e, f, g, h) {
return [a, b, c, d, e, f, g, h].join("," );
}
var arr = [
f.bind(null , 1 , 2 , 3 , 4 , 5 , 6 ),
f.bind(null , 4 , 5 , 6 , 7 , 8 , 9 ),
f.bind(null , 1 , 2 ),
f.bind(null , 1 ),
];
var expected = [
"1,2,3,4,5,6,10,11" ,
"4,5,6,7,8,9,10,11" ,
"1,2,10,11,12,13,14,15" ,
"1,10,11,12,13,14,15," ,
];
for (var i = 0 ; i < 100 ; i++) {
assertEq(arr[0 ](10 , 11 , 12 , 13 , 14 , 15 ), expected[0 ]);
assertEq(arr[1 ](10 , 11 , 12 , 13 , 14 , 15 ), expected[1 ]);
assertEq(arr[2 ](10 , 11 , 12 , 13 , 14 , 15 ), expected[2 ]);
assertEq(arr[3 ](10 , 11 , 12 , 13 , 14 , 15 ), expected[3 ]);
assertEq(arr[i % arr.length](10 , 11 , 12 , 13 , 14 , 15 ), expected[i % arr.length]);
}
}
testNumBoundArgsGuard();
function testJSFunctionGuard() {
var arr = [
(x => x * 0 ).bind(null , 1 ),
(x => x * 1 ).bind(null , 2 ),
(x => x * 2 ).bind(null , 3 ),
(x => x * 3 ).bind(null , 4 ),
(x => x * 4 ).bind(null , 5 ),
(x => x * 5 ).bind(null , 6 ),
(x => x * 6 ).bind(null , 7 ),
(x => x * 7 ).bind(null , 8 ),
(x => x * 8 ).bind(null , 9 ),
];
var boundNative = Math.abs.bind(null , -123 );
var boundProxy = (new Proxy(x => x * 42 , {})).bind(null , 7 );
for (var i = 0 ; i < 100 ; i++) {
var idx = i % arr.length;
var fun1 = arr[idx];
var expected1 = idx * (idx + 1 );
assertEq(fun1(), expected1);
var fun2 = i > 70 ? boundNative : fun1;
assertEq(fun2(), i > 70 ? 123 : expected1);
var fun3 = i > 70 ? boundProxy : fun1;
assertEq(fun3(), i > 70 ? 294 : expected1);
}
}
testJSFunctionGuard();
function testCrossRealmTarget() {
globalThis.num = "FAIL" ;
var globals = [];
for (var i = 0 ; i < 4 ; i++) {
var g = newGlobal({sameCompartmentAs: this });
g.num = i;
globals.push(g);
}
var arr = globals.map(g => g.evaluate("(x => this.num)" ));
arr = arr.map(f => Function .prototype.bind.call(f, null ));
for (var i = 0 ; i < 200 ; i++) {
assertEq(arr[0 ](), 0 );
var idx = i % arr.length;
assertEq(arr[idx](), idx);
}
}
testCrossRealmTarget();
// Bug 1819651.
function testReturnsItself() {
var fun = function () { return boundFun; };
var boundFun = fun.bind(null );
for (var i = 0 ; i < 20 ; i++) {
assertEq(boundFun(), boundFun);
assertEq(new boundFun(), boundFun);
}
}
testReturnsItself();
Messung V0.5 in Prozent C=97 H=81 G=89
¤ Dauer der Verarbeitung: 0.11 Sekunden
(vorverarbeitet am 2026-06-06)
¤
*© Formatika GbR, Deutschland