tor-browser

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

bigint-toprimitive.js (9663B)


      1 // Copyright (C) 2017 Josh Wolfe. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 description: unsigned-right-shift operator ToNumeric with BigInt operands
      5 esid: sec-unsigned-right-shift-operator-runtime-semantics-evaluation
      6 info: After ToNumeric type coercion, unsigned-right-shift always throws for BigInt operands
      7 features: [BigInt, Symbol.toPrimitive, computed-property-names]
      8 ---*/
      9 function err() {
     10  throw new Test262Error();
     11 }
     12 
     13 function MyError() {}
     14 
     15 assert.throws(TypeError, function() {
     16  ({
     17    [Symbol.toPrimitive]: function() {
     18      return 2n;
     19    },
     20 
     21    valueOf: err,
     22    toString: err
     23  }) >>> 0n;
     24 }, '({[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err}) >>> 0n throws TypeError');
     25 
     26 assert.throws(TypeError, function() {
     27  0n >>> {
     28    [Symbol.toPrimitive]: function() {
     29      return 2n;
     30    },
     31 
     32    valueOf: err,
     33    toString: err
     34  };
     35 }, '0n >>> {[Symbol.toPrimitive]: function() {return 2n;}, valueOf: err, toString: err} throws TypeError');
     36 
     37 assert.throws(TypeError, function() {
     38  ({
     39    valueOf: function() {
     40      return 2n;
     41    },
     42 
     43    toString: err
     44  }) >>> 0n;
     45 }, '({valueOf: function() {return 2n;}, toString: err}) >>> 0n throws TypeError');
     46 
     47 assert.throws(TypeError, function() {
     48  0n >>> {
     49    valueOf: function() {
     50      return 2n;
     51    },
     52 
     53    toString: err
     54  };
     55 }, '0n >>> {valueOf: function() {return 2n;}, toString: err} throws TypeError');
     56 
     57 assert.throws(TypeError, function() {
     58  ({
     59    toString: function() {
     60      return 2n;
     61    }
     62  }) >>> 0n;
     63 }, '({toString: function() {return 2n;}}) >>> 0n throws TypeError');
     64 
     65 assert.throws(TypeError, function() {
     66  0n >>> {
     67    toString: function() {
     68      return 2n;
     69    }
     70  };
     71 }, '0n >>> {toString: function() {return 2n;}} throws TypeError');
     72 
     73 assert.throws(TypeError, function() {
     74  ({
     75    [Symbol.toPrimitive]: undefined,
     76 
     77    valueOf: function() {
     78      return 2n;
     79    }
     80  }) >>> 0n;
     81 }, '({[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}}) >>> 0n throws TypeError');
     82 
     83 assert.throws(TypeError, function() {
     84  0n >>> {
     85    [Symbol.toPrimitive]: undefined,
     86 
     87    valueOf: function() {
     88      return 2n;
     89    }
     90  };
     91 }, '0n >>> {[Symbol.toPrimitive]: undefined, valueOf: function() {return 2n;}} throws TypeError');
     92 
     93 assert.throws(TypeError, function() {
     94  ({
     95    [Symbol.toPrimitive]: null,
     96 
     97    valueOf: function() {
     98      return 2n;
     99    }
    100  }) >>> 0n;
    101 }, '({[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}}) >>> 0n throws TypeError');
    102 
    103 assert.throws(TypeError, function() {
    104  0n >>> {
    105    [Symbol.toPrimitive]: null,
    106 
    107    valueOf: function() {
    108      return 2n;
    109    }
    110  };
    111 }, '0n >>> {[Symbol.toPrimitive]: null, valueOf: function() {return 2n;}} throws TypeError');
    112 
    113 assert.throws(TypeError, function() {
    114  ({
    115    valueOf: null,
    116 
    117    toString: function() {
    118      return 2n;
    119    }
    120  }) >>> 0n;
    121 }, '({valueOf: null, toString: function() {return 2n;}}) >>> 0n throws TypeError');
    122 
    123 assert.throws(TypeError, function() {
    124  0n >>> {
    125    valueOf: null,
    126 
    127    toString: function() {
    128      return 2n;
    129    }
    130  };
    131 }, '0n >>> {valueOf: null, toString: function() {return 2n;}} throws TypeError');
    132 
    133 assert.throws(TypeError, function() {
    134  ({
    135    valueOf: 1,
    136 
    137    toString: function() {
    138      return 2n;
    139    }
    140  }) >>> 0n;
    141 }, '({valueOf: 1, toString: function() {return 2n;}}) >>> 0n throws TypeError');
    142 
    143 assert.throws(TypeError, function() {
    144  0n >>> {
    145    valueOf: 1,
    146 
    147    toString: function() {
    148      return 2n;
    149    }
    150  };
    151 }, '0n >>> {valueOf: 1, toString: function() {return 2n;}} throws TypeError');
    152 
    153 assert.throws(TypeError, function() {
    154  ({
    155    valueOf: {},
    156 
    157    toString: function() {
    158      return 2n;
    159    }
    160  }) >>> 0n;
    161 }, '({valueOf: {}, toString: function() {return 2n;}}) >>> 0n throws TypeError');
    162 
    163 assert.throws(TypeError, function() {
    164  0n >>> {
    165    valueOf: {},
    166 
    167    toString: function() {
    168      return 2n;
    169    }
    170  };
    171 }, '0n >>> {valueOf: {}, toString: function() {return 2n;}} throws TypeError');
    172 
    173 assert.throws(TypeError, function() {
    174  ({
    175    valueOf: function() {
    176      return {};
    177    },
    178 
    179    toString: function() {
    180      return 2n;
    181    }
    182  }) >>> 0n;
    183 }, '({valueOf: function() {return {};}, toString: function() {return 2n;}}) >>> 0n throws TypeError');
    184 
    185 assert.throws(TypeError, function() {
    186  0n >>> {
    187    valueOf: function() {
    188      return {};
    189    },
    190 
    191    toString: function() {
    192      return 2n;
    193    }
    194  };
    195 }, '0n >>> {valueOf: function() {return {};}, toString: function() {return 2n;}} throws TypeError');
    196 
    197 assert.throws(TypeError, function() {
    198  ({
    199    valueOf: function() {
    200      return Object(12345);
    201    },
    202 
    203    toString: function() {
    204      return 2n;
    205    }
    206  }) >>> 0n;
    207 }, '({valueOf: function() {return Object(12345);}, toString: function() {return 2n;}}) >>> 0n throws TypeError');
    208 
    209 assert.throws(TypeError, function() {
    210  0n >>> {
    211    valueOf: function() {
    212      return Object(12345);
    213    },
    214 
    215    toString: function() {
    216      return 2n;
    217    }
    218  };
    219 }, '0n >>> {valueOf: function() {return Object(12345);}, toString: function() {return 2n;}} throws TypeError');
    220 
    221 assert.throws(TypeError, function() {
    222  ({
    223    [Symbol.toPrimitive]: 1
    224  }) >>> 0n;
    225 }, '({[Symbol.toPrimitive]: 1}) >>> 0n throws TypeError');
    226 
    227 assert.throws(TypeError, function() {
    228  0n >>> {
    229    [Symbol.toPrimitive]: 1
    230  };
    231 }, '0n >>> {[Symbol.toPrimitive]: 1} throws TypeError');
    232 
    233 assert.throws(TypeError, function() {
    234  ({
    235    [Symbol.toPrimitive]: {}
    236  }) >>> 0n;
    237 }, '({[Symbol.toPrimitive]: {}}) >>> 0n throws TypeError');
    238 
    239 assert.throws(TypeError, function() {
    240  0n >>> {
    241    [Symbol.toPrimitive]: {}
    242  };
    243 }, '0n >>> {[Symbol.toPrimitive]: {}} throws TypeError');
    244 
    245 assert.throws(TypeError, function() {
    246  ({
    247    [Symbol.toPrimitive]: function() {
    248      return Object(1);
    249    }
    250  }) >>> 0n;
    251 }, '({[Symbol.toPrimitive]: function() {return Object(1);}}) >>> 0n throws TypeError');
    252 
    253 assert.throws(TypeError, function() {
    254  0n >>> {
    255    [Symbol.toPrimitive]: function() {
    256      return Object(1);
    257    }
    258  };
    259 }, '0n >>> {[Symbol.toPrimitive]: function() {return Object(1);}} throws TypeError');
    260 
    261 assert.throws(TypeError, function() {
    262  ({
    263    [Symbol.toPrimitive]: function() {
    264      return {};
    265    }
    266  }) >>> 0n;
    267 }, '({[Symbol.toPrimitive]: function() {return {};}}) >>> 0n throws TypeError');
    268 
    269 assert.throws(TypeError, function() {
    270  0n >>> {
    271    [Symbol.toPrimitive]: function() {
    272      return {};
    273    }
    274  };
    275 }, '0n >>> {[Symbol.toPrimitive]: function() {return {};}} throws TypeError');
    276 
    277 assert.throws(MyError, function() {
    278  ({
    279    [Symbol.toPrimitive]: function() {
    280      throw new MyError();
    281    }
    282  }) >>> 0n;
    283 }, '({[Symbol.toPrimitive]: function() {throw new MyError();}}) >>> 0n throws MyError');
    284 
    285 assert.throws(MyError, function() {
    286  0n >>> {
    287    [Symbol.toPrimitive]: function() {
    288      throw new MyError();
    289    }
    290  };
    291 }, '0n >>> {[Symbol.toPrimitive]: function() {throw new MyError();}} throws MyError');
    292 
    293 assert.throws(MyError, function() {
    294  ({
    295    valueOf: function() {
    296      throw new MyError();
    297    }
    298  }) >>> 0n;
    299 }, '({valueOf: function() {throw new MyError();}}) >>> 0n throws MyError');
    300 
    301 assert.throws(MyError, function() {
    302  0n >>> {
    303    valueOf: function() {
    304      throw new MyError();
    305    }
    306  };
    307 }, '0n >>> {valueOf: function() {throw new MyError();}} throws MyError');
    308 
    309 assert.throws(MyError, function() {
    310  ({
    311    toString: function() {
    312      throw new MyError();
    313    }
    314  }) >>> 0n;
    315 }, '({toString: function() {throw new MyError();}}) >>> 0n throws MyError');
    316 
    317 assert.throws(MyError, function() {
    318  0n >>> {
    319    toString: function() {
    320      throw new MyError();
    321    }
    322  };
    323 }, '0n >>> {toString: function() {throw new MyError();}} throws MyError');
    324 
    325 assert.throws(TypeError, function() {
    326  ({
    327    valueOf: null,
    328    toString: null
    329  }) >>> 0n;
    330 }, '({valueOf: null, toString: null}) >>> 0n throws TypeError');
    331 
    332 assert.throws(TypeError, function() {
    333  0n >>> {
    334    valueOf: null,
    335    toString: null
    336  };
    337 }, '0n >>> {valueOf: null, toString: null} throws TypeError');
    338 
    339 assert.throws(TypeError, function() {
    340  ({
    341    valueOf: 1,
    342    toString: 1
    343  }) >>> 0n;
    344 }, '({valueOf: 1, toString: 1}) >>> 0n throws TypeError');
    345 
    346 assert.throws(TypeError, function() {
    347  0n >>> {
    348    valueOf: 1,
    349    toString: 1
    350  };
    351 }, '0n >>> {valueOf: 1, toString: 1} throws TypeError');
    352 
    353 assert.throws(TypeError, function() {
    354  ({
    355    valueOf: {},
    356    toString: {}
    357  }) >>> 0n;
    358 }, '({valueOf: {}, toString: {}}) >>> 0n throws TypeError');
    359 
    360 assert.throws(TypeError, function() {
    361  0n >>> {
    362    valueOf: {},
    363    toString: {}
    364  };
    365 }, '0n >>> {valueOf: {}, toString: {}} throws TypeError');
    366 
    367 assert.throws(TypeError, function() {
    368  ({
    369    valueOf: function() {
    370      return Object(1);
    371    },
    372 
    373    toString: function() {
    374      return Object(1);
    375    }
    376  }) >>> 0n;
    377 }, '({valueOf: function() {return Object(1);}, toString: function() {return Object(1);}}) >>> 0n throws TypeError');
    378 
    379 assert.throws(TypeError, function() {
    380  0n >>> {
    381    valueOf: function() {
    382      return Object(1);
    383    },
    384 
    385    toString: function() {
    386      return Object(1);
    387    }
    388  };
    389 }, '0n >>> {valueOf: function() {return Object(1);}, toString: function() {return Object(1);}} throws TypeError');
    390 
    391 assert.throws(TypeError, function() {
    392  ({
    393    valueOf: function() {
    394      return {};
    395    },
    396 
    397    toString: function() {
    398      return {};
    399    }
    400  }) >>> 0n;
    401 }, '({valueOf: function() {return {};}, toString: function() {return {};}}) >>> 0n throws TypeError');
    402 
    403 assert.throws(TypeError, function() {
    404  0n >>> {
    405    valueOf: function() {
    406      return {};
    407    },
    408 
    409    toString: function() {
    410      return {};
    411    }
    412  };
    413 }, '0n >>> {valueOf: function() {return {};}, toString: function() {return {};}} throws TypeError');
    414 
    415 reportCompare(0, 0);