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);