tor-browser

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

slice.js (12775B)


      1 // Tests when |arguments| are used with Array.prototype.slice.
      2 
      3 function testBasic() {
      4  // Return the number of arguments.
      5  function argslen() { return arguments.length; }
      6 
      7  // Return the first argument.
      8  function arg0() { return arguments[0]; }
      9 
     10  // Return the argument at the request index.
     11  function argIndex(i) { return arguments[i]; }
     12 
     13  // Call the above functions when no formals are present.
     14  function noFormalsLen() { return argslen(...Array.prototype.slice.call(arguments)); }
     15  function noFormals0() { return arg0(...Array.prototype.slice.call(arguments)); }
     16  function noFormalsIndex() { return argIndex(...Array.prototype.slice.call(arguments)); }
     17 
     18  // Call the above functions when some formals are present.
     19  function formalsLen(x, y, z) { return argslen(...Array.prototype.slice.call(arguments)); }
     20  function formals0(x, y, z) { return arg0(...Array.prototype.slice.call(arguments)); }
     21  function formalsIndex(x, y, z) { return argIndex(...Array.prototype.slice.call(arguments)); }
     22 
     23  // Call the above functions when a rest argument is present.
     24  function restLen(...rest) { return argslen(...Array.prototype.slice.call(arguments)); }
     25  function rest0(...rest) { return arg0(...Array.prototype.slice.call(arguments)); }
     26  function restIndex(...rest) { return argIndex(...Array.prototype.slice.call(arguments)); }
     27 
     28  // Call the above functions when default parameters are present.
     29  function defaultLen(x = 0) { return argslen(...Array.prototype.slice.call(arguments)); }
     30  function default0(x = 0) { return arg0(...Array.prototype.slice.call(arguments)); }
     31  function defaultIndex(x = 0) { return argIndex(...Array.prototype.slice.call(arguments)); }
     32 
     33  for (let i = 0; i < 100; ++i) {
     34    assertEq(noFormalsLen(), 0);
     35    assertEq(noFormalsLen(1), 1);
     36    assertEq(noFormalsLen(1, 2, 3), 3);
     37 
     38    assertEq(formalsLen(), 0);
     39    assertEq(formalsLen(1), 1);
     40    assertEq(formalsLen(1, 2, 3), 3);
     41 
     42    assertEq(restLen(), 0);
     43    assertEq(restLen(1), 1);
     44    assertEq(restLen(1, 2, 3), 3);
     45 
     46    assertEq(defaultLen(), 0);
     47    assertEq(defaultLen(1), 1);
     48    assertEq(defaultLen(1, 2, 3), 3);
     49 
     50    assertEq(noFormals0(), undefined);
     51    assertEq(noFormals0(100), 100);
     52    assertEq(noFormals0(100, 200, 300), 100);
     53 
     54    assertEq(formals0(), undefined);
     55    assertEq(formals0(100), 100);
     56    assertEq(formals0(100, 200, 300), 100);
     57 
     58    assertEq(rest0(), undefined);
     59    assertEq(rest0(100), 100);
     60    assertEq(rest0(100, 200, 300), 100);
     61 
     62    assertEq(default0(), undefined);
     63    assertEq(default0(100), 100);
     64    assertEq(default0(100, 200, 300), 100);
     65 
     66    assertEq(noFormalsIndex(), undefined);
     67    assertEq(noFormalsIndex(0), 0);
     68    assertEq(noFormalsIndex(0, 100), 0);
     69    assertEq(noFormalsIndex(0, 100, 200, 300), 0);
     70    assertEq(noFormalsIndex(1, 100), 100);
     71    assertEq(noFormalsIndex(1, 100, 200, 300), 100);
     72 
     73    assertEq(formalsIndex(), undefined);
     74    assertEq(formalsIndex(0), 0);
     75    assertEq(formalsIndex(0, 100), 0);
     76    assertEq(formalsIndex(0, 100, 200, 300), 0);
     77    assertEq(formalsIndex(1, 100), 100);
     78    assertEq(formalsIndex(1, 100, 200, 300), 100);
     79 
     80    assertEq(restIndex(), undefined);
     81    assertEq(restIndex(0), 0);
     82    assertEq(restIndex(0, 100), 0);
     83    assertEq(restIndex(0, 100, 200, 300), 0);
     84    assertEq(restIndex(1, 100), 100);
     85    assertEq(restIndex(1, 100, 200, 300), 100);
     86 
     87    assertEq(defaultIndex(), undefined);
     88    assertEq(defaultIndex(0), 0);
     89    assertEq(defaultIndex(0, 100), 0);
     90    assertEq(defaultIndex(0, 100, 200, 300), 0);
     91    assertEq(defaultIndex(1, 100), 100);
     92    assertEq(defaultIndex(1, 100, 200, 300), 100);
     93  }
     94 }
     95 testBasic();
     96 
     97 // Same as testBasic, except that the first argument is removed.
     98 function testRemoveFirst() {
     99  // Return the number of arguments.
    100  function argslen() { return arguments.length; }
    101 
    102  // Return the first argument.
    103  function arg0() { return arguments[0]; }
    104 
    105  // Return the argument at the request index.
    106  function argIndex(i) { return arguments[i]; }
    107 
    108  // Call the above functions when no formals are present.
    109  function noFormalsLen() { return argslen(...Array.prototype.slice.call(arguments, 1)); }
    110  function noFormals0() { return arg0(...Array.prototype.slice.call(arguments, 1)); }
    111  function noFormalsIndex() { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
    112 
    113  // Call the above functions when some formals are present.
    114  function formalsLen(x, y, z) { return argslen(...Array.prototype.slice.call(arguments, 1)); }
    115  function formals0(x, y, z) { return arg0(...Array.prototype.slice.call(arguments, 1)); }
    116  function formalsIndex(x, y, z) { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
    117 
    118  // Call the above functions when a rest argument is present.
    119  function restLen(...rest) { return argslen(...Array.prototype.slice.call(arguments, 1)); }
    120  function rest0(...rest) { return arg0(...Array.prototype.slice.call(arguments, 1)); }
    121  function restIndex(...rest) { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
    122 
    123  // Call the above functions when default parameters are present.
    124  function defaultLen(x = 0) { return argslen(...Array.prototype.slice.call(arguments, 1)); }
    125  function default0(x = 0) { return arg0(...Array.prototype.slice.call(arguments, 1)); }
    126  function defaultIndex(x = 0) { return argIndex(...Array.prototype.slice.call(arguments, 1)); }
    127 
    128  for (let i = 0; i < 100; ++i) {
    129    assertEq(noFormalsLen(), 0);
    130    assertEq(noFormalsLen(1), 0);
    131    assertEq(noFormalsLen(1, 2, 3), 2);
    132 
    133    assertEq(formalsLen(), 0);
    134    assertEq(formalsLen(1), 0);
    135    assertEq(formalsLen(1, 2, 3), 2);
    136 
    137    assertEq(restLen(), 0);
    138    assertEq(restLen(1), 0);
    139    assertEq(restLen(1, 2, 3), 2);
    140 
    141    assertEq(defaultLen(), 0);
    142    assertEq(defaultLen(1), 0);
    143    assertEq(defaultLen(1, 2, 3), 2);
    144 
    145    assertEq(noFormals0(), undefined);
    146    assertEq(noFormals0(100), undefined);
    147    assertEq(noFormals0(100, 200, 300), 200);
    148 
    149    assertEq(formals0(), undefined);
    150    assertEq(formals0(100), undefined);
    151    assertEq(formals0(100, 200, 300), 200);
    152 
    153    assertEq(rest0(), undefined);
    154    assertEq(rest0(100), undefined);
    155    assertEq(rest0(100, 200, 300), 200);
    156 
    157    assertEq(default0(), undefined);
    158    assertEq(default0(100), undefined);
    159    assertEq(default0(100, 200, 300), 200);
    160 
    161    assertEq(noFormalsIndex(), undefined);
    162    assertEq(noFormalsIndex(0), undefined);
    163    assertEq(noFormalsIndex(0, 100), undefined);
    164    assertEq(noFormalsIndex(0, 0, 100), 0);
    165    assertEq(noFormalsIndex(0, 0, 100, 200, 300), 0);
    166    assertEq(noFormalsIndex(0, 1, 100), 100);
    167    assertEq(noFormalsIndex(0, 1, 100, 200, 300), 100);
    168 
    169    assertEq(formalsIndex(), undefined);
    170    assertEq(formalsIndex(0), undefined);
    171    assertEq(formalsIndex(0, 100), undefined);
    172    assertEq(formalsIndex(0, 0, 100), 0);
    173    assertEq(formalsIndex(0, 0, 100, 200, 300), 0);
    174    assertEq(formalsIndex(0, 1, 100), 100);
    175    assertEq(formalsIndex(0, 1, 100, 200, 300), 100);
    176 
    177    assertEq(restIndex(), undefined);
    178    assertEq(restIndex(0), undefined);
    179    assertEq(restIndex(0, 0), 0);
    180    assertEq(restIndex(0, 0, 100), 0);
    181    assertEq(restIndex(0, 0, 100, 200, 300), 0);
    182    assertEq(restIndex(0, 1, 100), 100);
    183    assertEq(restIndex(0, 1, 100, 200, 300), 100);
    184 
    185    assertEq(defaultIndex(), undefined);
    186    assertEq(defaultIndex(0), undefined);
    187    assertEq(defaultIndex(0, 0), 0);
    188    assertEq(defaultIndex(0, 0, 100), 0);
    189    assertEq(defaultIndex(0, 0, 100, 200, 300), 0);
    190    assertEq(defaultIndex(0, 1, 100), 100);
    191    assertEq(defaultIndex(0, 1, 100, 200, 300), 100);
    192  }
    193 }
    194 testRemoveFirst();
    195 
    196 // Same as testBasic, except that the last argument is removed.
    197 function testRemoveLast() {
    198  // Return the number of arguments.
    199  function argslen() { return arguments.length; }
    200 
    201  // Return the first argument.
    202  function arg0() { return arguments[0]; }
    203 
    204  // Return the argument at the request index.
    205  function argIndex(i) { return arguments[i]; }
    206 
    207  // Call the above functions when no formals are present.
    208  function noFormalsLen() { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); }
    209  function noFormals0() { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); }
    210  function noFormalsIndex() { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
    211 
    212  // Call the above functions when some formals are present.
    213  function formalsLen(x, y, z) { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); }
    214  function formals0(x, y, z) { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); }
    215  function formalsIndex(x, y, z) { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
    216 
    217  // Call the above functions when a rest argument is present.
    218  function restLen(...rest) { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); }
    219  function rest0(...rest) { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); }
    220  function restIndex(...rest) { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
    221 
    222  // Call the above functions when default parameters are present.
    223  function defaultLen(x = 0) { return argslen(...Array.prototype.slice.call(arguments, 0, -1)); }
    224  function default0(x = 0) { return arg0(...Array.prototype.slice.call(arguments, 0, -1)); }
    225  function defaultIndex(x = 0) { return argIndex(...Array.prototype.slice.call(arguments, 0, -1)); }
    226 
    227  for (let i = 0; i < 100; ++i) {
    228    assertEq(noFormalsLen(), 0);
    229    assertEq(noFormalsLen(1), 0);
    230    assertEq(noFormalsLen(1, 2, 3), 2);
    231 
    232    assertEq(formalsLen(), 0);
    233    assertEq(formalsLen(1), 0);
    234    assertEq(formalsLen(1, 2, 3), 2);
    235 
    236    assertEq(restLen(), 0);
    237    assertEq(restLen(1), 0);
    238    assertEq(restLen(1, 2, 3), 2);
    239 
    240    assertEq(defaultLen(), 0);
    241    assertEq(defaultLen(1), 0);
    242    assertEq(defaultLen(1, 2, 3), 2);
    243 
    244    assertEq(noFormals0(), undefined);
    245    assertEq(noFormals0(100), undefined);
    246    assertEq(noFormals0(100, 200, 300), 100);
    247 
    248    assertEq(formals0(), undefined);
    249    assertEq(formals0(100), undefined);
    250    assertEq(formals0(100, 200, 300), 100);
    251 
    252    assertEq(rest0(), undefined);
    253    assertEq(rest0(100), undefined);
    254    assertEq(rest0(100, 200, 300), 100);
    255 
    256    assertEq(default0(), undefined);
    257    assertEq(default0(100), undefined);
    258    assertEq(default0(100, 200, 300), 100);
    259 
    260    assertEq(noFormalsIndex(), undefined);
    261    assertEq(noFormalsIndex(0), undefined);
    262    assertEq(noFormalsIndex(0, 100), 0);
    263    assertEq(noFormalsIndex(0, 100, 200, 300), 0);
    264    assertEq(noFormalsIndex(1, 100), undefined);
    265    assertEq(noFormalsIndex(1, 100, 200, 300), 100);
    266 
    267    assertEq(formalsIndex(), undefined);
    268    assertEq(formalsIndex(0), undefined);
    269    assertEq(formalsIndex(0, 100), 0);
    270    assertEq(formalsIndex(0, 100, 200, 300), 0);
    271    assertEq(formalsIndex(1, 100), undefined);
    272    assertEq(formalsIndex(1, 100, 200, 300), 100);
    273 
    274    assertEq(restIndex(), undefined);
    275    assertEq(restIndex(0), undefined);
    276    assertEq(restIndex(0, 100), 0);
    277    assertEq(restIndex(0, 100, 200, 300), 0);
    278    assertEq(restIndex(1, 100), undefined);
    279    assertEq(restIndex(1, 100, 200, 300), 100);
    280 
    281    assertEq(defaultIndex(), undefined);
    282    assertEq(defaultIndex(0), undefined);
    283    assertEq(defaultIndex(0, 100), 0);
    284    assertEq(defaultIndex(0, 100, 200, 300), 0);
    285    assertEq(defaultIndex(1, 100), undefined);
    286    assertEq(defaultIndex(1, 100, 200, 300), 100);
    287  }
    288 }
    289 testRemoveLast();
    290 
    291 function testOverriddenLength() {
    292  function g(x, y = 0) {
    293    return x + y;
    294  }
    295 
    296  function f(i) {
    297    if (i === 100) {
    298      arguments.length = 1;
    299    }
    300    var args = Array.prototype.slice.call(arguments);
    301    return g.apply(null, args);
    302  }
    303 
    304  for (let i = 0; i <= 150; ++i) {
    305    assertEq(f(i, i), i !== 100 ? i * 2 : i);
    306  }
    307 }
    308 testOverriddenLength();
    309 
    310 function testOverriddenElement() {
    311  function g(x, y) {
    312    return x + y;
    313  }
    314 
    315  function f(i) {
    316    if (i === 100) {
    317      arguments[1] = 0;
    318    }
    319    var args = Array.prototype.slice.call(arguments);
    320    return g(args[0], args[1]);
    321  }
    322 
    323  for (let i = 0; i <= 150; ++i) {
    324    assertEq(f(i, i), i !== 100 ? i * 2 : i);
    325  }
    326 }
    327 testOverriddenElement();
    328 
    329 function testDeletedElement() {
    330  function g(x, y = 0) {
    331    return x + y;
    332  }
    333 
    334  function f(i) {
    335    if (i === 100) {
    336      delete arguments[1];
    337    }
    338    var args = Array.prototype.slice.call(arguments);
    339    return g.apply(null, args);
    340  }
    341 
    342  for (let i = 0; i <= 150; ++i) {
    343    assertEq(f(i, i), i !== 100 ? i * 2 : i);
    344  }
    345 }
    346 testDeletedElement();
    347 
    348 function testForwardedArg() {
    349  function g(x, y) {
    350    return x + y;
    351  }
    352 
    353  function f(i) {
    354    function closedOver() {
    355      if (i === 100) i = 0;
    356    }
    357    closedOver();
    358    var args = Array.prototype.slice.call(arguments);
    359    return g(args[0], args[1]);
    360  }
    361 
    362  for (let i = 0; i <= 150; ++i) {
    363    assertEq(f(i, i), i !== 100 ? i * 2 : i);
    364  }
    365 }
    366 testForwardedArg();