bigint-non-primitive.js (2779B)
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 always throws for non-primitive BigInt values 5 esid: sec-unsigned-right-shift-operator-runtime-semantics-evaluation 6 info: | 7 ShiftExpression : ShiftExpression >>> AdditiveExpression 8 9 1. Let lref be the result of evaluating ShiftExpression. 10 2. Let lval be ? GetValue(lref). 11 3. Let rref be the result of evaluating AdditiveExpression. 12 4. Let rval be ? GetValue(rref). 13 5. Let lnum be ? ToNumeric(lval). 14 6. Let rnum be ? ToNumeric(rval). 15 7. If Type(lnum) does not equal Type(rnum), throw a TypeError exception. 16 8. Let T be Type(lnum). 17 9. Return T::unsignedRightShift(lnum, rnum). 18 19 Note: BigInt::unsignedRightShift always throws a TypeError 20 21 features: [BigInt, Symbol.toPrimitive] 22 ---*/ 23 assert.throws(TypeError, function() { 24 Object(0b101n) >>> 1n; 25 }, 'Object(0b101n) >>> 1n throws TypeError'); 26 27 assert.throws(TypeError, function() { 28 Object(0b101n) >>> Object(1n); 29 }, 'Object(0b101n) >>> Object(1n) throws TypeError'); 30 31 function err() { 32 throw new Test262Error(); 33 } 34 35 assert.throws(TypeError, function() { 36 ({ 37 [Symbol.toPrimitive]: function() { 38 return 0b101n; 39 }, 40 41 valueOf: err, 42 toString: err 43 }) >>> 1n; 44 }, '({[Symbol.toPrimitive]: function() {return 0b101n;}, valueOf: err, toString: err}) >>> 1n throws TypeError'); 45 46 assert.throws(TypeError, function() { 47 ({ 48 valueOf: function() { 49 return 0b101n; 50 }, 51 52 toString: err 53 }) >>> 1n; 54 }, '({valueOf: function() {return 0b101n;}, toString: err}) >>> 1n throws TypeError'); 55 56 assert.throws(TypeError, function() { 57 ({ 58 toString: function() { 59 return 0b101n; 60 } 61 }) >>> 1n; 62 }, '({toString: function() {return 0b101n;}}) >>> 1n throws TypeError'); 63 64 assert.throws(TypeError, function() { 65 0b101n >>> { 66 [Symbol.toPrimitive]: function() { 67 return 1n; 68 }, 69 70 valueOf: err, 71 toString: err 72 }; 73 }, '0b101n >>> {[Symbol.toPrimitive]: function() {return 1n;}, valueOf: err, toString: err} throws TypeError'); 74 75 assert.throws(TypeError, function() { 76 0b101n >>> { 77 valueOf: function() { 78 return 1n; 79 }, 80 81 toString: err 82 }; 83 }, '0b101n >>> {valueOf: function() {return 1n;}, toString: err} throws TypeError'); 84 85 assert.throws(TypeError, function() { 86 0b101n >>> { 87 toString: function() { 88 return 1n; 89 } 90 }; 91 }, '0b101n >>> {toString: function() {return 1n;}} throws TypeError'); 92 93 assert.throws(TypeError, function() { 94 ({ 95 valueOf: function() { 96 return 0b101n; 97 } 98 }) >>> { 99 valueOf: function() { 100 return 1n; 101 } 102 }; 103 }, '({valueOf: function() {return 0b101n;}}) >>> {valueOf: function() {return 1n;}} throws TypeError'); 104 105 reportCompare(0, 0);