tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

bound-fun-apply-inlinable-native.js (2935B)


      1 // Test inlining bound fun_apply to inlinable natives.
      2 
      3 function testNoBoundThis() {
      4  var ArrayJoin = Function.prototype.apply.bind(Array.prototype.join);
      5 
      6  var xs = [
      7    [],
      8    ["a"],
      9    ["a", "b"],
     10    ["a", "b", "c"],
     11  ];
     12 
     13  for (var i = 0; i < 100; ++i) {
     14    var x = xs[i & 3];
     15    assertEq(ArrayJoin(x), x.join());
     16    assertEq(ArrayJoin(x, null), x.join());
     17    assertEq(ArrayJoin(x, undefined), x.join());
     18 
     19    // Not optimized cases.
     20    assertEq(ArrayJoin(x, []), x.join());
     21    assertEq(ArrayJoin(x, [""]), x.join(""));
     22  }
     23 }
     24 testNoBoundThis();
     25 
     26 function testBoundThis() {
     27  var array = ["a", "b"];
     28  var ArrayJoin = Function.prototype.apply.bind(Array.prototype.join, array);
     29 
     30  for (var i = 0; i < 100; ++i) {
     31    assertEq(ArrayJoin(), "a,b");
     32    assertEq(ArrayJoin(null), "a,b");
     33    assertEq(ArrayJoin(undefined), "a,b");
     34 
     35    // Not optimized cases.
     36    assertEq(ArrayJoin([]), "a,b");
     37    assertEq(ArrayJoin([""]), "ab");
     38  }
     39 }
     40 testBoundThis();
     41 
     42 function testBoundThisAndArgs() {
     43  var array = ["a", "b"];
     44  var ArrayJoinNull = Function.prototype.apply.bind(Array.prototype.join, array, null);
     45  var ArrayJoinUndefined = Function.prototype.apply.bind(Array.prototype.join, array, undefined);
     46  var ArrayJoinEmptyArgs = Function.prototype.apply.bind(Array.prototype.join, array, []);
     47  var ArrayJoinWithArgs = Function.prototype.apply.bind(Array.prototype.join, array, [""]);
     48 
     49  for (var i = 0; i < 100; ++i) {
     50    assertEq(ArrayJoinNull(), "a,b");
     51    assertEq(ArrayJoinUndefined(), "a,b");
     52 
     53    // Not optimized cases.
     54    assertEq(ArrayJoinEmptyArgs(), "a,b");
     55    assertEq(ArrayJoinWithArgs(), "ab");
     56  }
     57 }
     58 testBoundThisAndArgs();
     59 
     60 function testUndefinedGuard() {
     61  var array = ["a", "b"];
     62 
     63  var ArrayJoin = Function.prototype.apply.bind(Array.prototype.join);
     64  var ArrayJoinBoundThis = Function.prototype.apply.bind(Array.prototype.join, array);
     65 
     66  var args = [
     67    null,
     68    [""],
     69  ];
     70  var expected = [
     71    "a,b",
     72    "ab",
     73  ];
     74 
     75  for (var i = 0; i < 100; i++) {
     76    var index = (i > 50)|0;
     77 
     78    assertEq(ArrayJoin(array, args[index]), expected[index]);
     79    assertEq(ArrayJoinBoundThis(args[index]), expected[index]);
     80  }
     81 }
     82 testUndefinedGuard();
     83 
     84 function testUndefinedBoundArgsGuard() {
     85  var array = ["a", "b"];
     86 
     87  var ArrayJoinBoundNull = Function.prototype.apply.bind(Array.prototype.join, array, null);
     88  var ArrayJoinBoundUndefined = Function.prototype.apply.bind(Array.prototype.join, array, undefined);
     89  var ArrayJoinBoundArgs = Function.prototype.apply.bind(Array.prototype.join, array, [""]);
     90 
     91  var fns = [
     92    [
     93      ArrayJoinBoundNull,
     94      ArrayJoinBoundArgs,
     95    ],
     96    [
     97      ArrayJoinBoundUndefined,
     98      ArrayJoinBoundArgs,
     99    ],
    100  ];
    101  var expected = [
    102    "a,b",
    103    "ab",
    104  ];
    105 
    106  for (var i = 0; i < 100; i++) {
    107    var index = (i > 50)|0;
    108 
    109    assertEq(fns[0][index](), expected[index]);
    110    assertEq(fns[1][index](), expected[index]);
    111  }
    112 }
    113 testUndefinedBoundArgsGuard();