bigint-tobigint-errors.js (5101B)
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: BigInt.asIntN type coercion for bigint parameter 5 esid: sec-bigint.asintn 6 info: | 7 BigInt.asIntN ( bits, bigint ) 8 9 2. Let bigint ? ToBigInt(bigint). 10 features: [BigInt, computed-property-names, Symbol, Symbol.toPrimitive] 11 ---*/ 12 assert.sameValue(typeof BigInt, 'function'); 13 assert.sameValue(typeof BigInt.asIntN, 'function'); 14 15 assert.throws(TypeError, function () { 16 BigInt.asIntN(); 17 }, "ToBigInt: no argument => undefined => TypeError"); 18 assert.throws(TypeError, function () { 19 BigInt.asIntN(0); 20 }, "ToBigInt: no argument => undefined => TypeError"); 21 22 assert.throws(TypeError, function() { 23 BigInt.asIntN(0, undefined); 24 }, "ToBigInt: undefined => TypeError"); 25 assert.throws(TypeError, function() { 26 BigInt.asIntN(0, { 27 [Symbol.toPrimitive]: function() { 28 return undefined; 29 } 30 }); 31 }, "ToBigInt: @@toPrimitive => undefined => TypeError"); 32 assert.throws(TypeError, function() { 33 BigInt.asIntN(0, { 34 valueOf: function() { 35 return undefined; 36 } 37 }); 38 }, "ToBigInt: valueOf => undefined => TypeError"); 39 assert.throws(TypeError, function() { 40 BigInt.asIntN(0, { 41 toString: function() { 42 return undefined; 43 } 44 }); 45 }, "ToBigInt: toString => undefined => TypeError"); 46 assert.throws(TypeError, function() { 47 BigInt.asIntN(0, null); 48 }, "ToBigInt: null => TypeError"); 49 assert.throws(TypeError, function() { 50 BigInt.asIntN(0, { 51 [Symbol.toPrimitive]: function() { 52 return null; 53 } 54 }); 55 }, "ToBigInt: @@toPrimitive => null => TypeError"); 56 assert.throws(TypeError, function() { 57 BigInt.asIntN(0, { 58 valueOf: function() { 59 return null; 60 } 61 }); 62 }, "ToBigInt: valueOf => null => TypeError"); 63 assert.throws(TypeError, function() { 64 BigInt.asIntN(0, { 65 toString: function() { 66 return null; 67 } 68 }); 69 }, "ToBigInt: toString => null => TypeError"); 70 assert.throws(TypeError, function() { 71 BigInt.asIntN(0, 0); 72 }, "ToBigInt: Number => TypeError"); 73 assert.throws(TypeError, function() { 74 BigInt.asIntN(0, Object(0)); 75 }, "ToBigInt: unbox object with internal slot => Number => TypeError"); 76 assert.throws(TypeError, function() { 77 BigInt.asIntN(0, { 78 [Symbol.toPrimitive]: function() { 79 return 0; 80 } 81 }); 82 }, "ToBigInt: @@toPrimitive => Number => TypeError"); 83 assert.throws(TypeError, function() { 84 BigInt.asIntN(0, { 85 valueOf: function() { 86 return 0; 87 } 88 }); 89 }, "ToBigInt: valueOf => Number => TypeError"); 90 assert.throws(TypeError, function() { 91 BigInt.asIntN(0, { 92 toString: function() { 93 return 0; 94 } 95 }); 96 }, "ToBigInt: toString => Number => TypeError"); 97 assert.throws(TypeError, function() { 98 BigInt.asIntN(0, NaN); 99 }, "ToBigInt: Number => TypeError"); 100 assert.throws(TypeError, function() { 101 BigInt.asIntN(0, Infinity); 102 }, "ToBigInt: Number => TypeError"); 103 assert.throws(TypeError, function() { 104 BigInt.asIntN(0, Symbol("1")); 105 }, "ToBigInt: Symbol => TypeError"); 106 assert.throws(TypeError, function() { 107 BigInt.asIntN(0, Object(Symbol("1"))); 108 }, "ToBigInt: unbox object with internal slot => Symbol => TypeError"); 109 assert.throws(TypeError, function() { 110 BigInt.asIntN(0, { 111 [Symbol.toPrimitive]: function() { 112 return Symbol("1"); 113 } 114 }); 115 }, "ToBigInt: @@toPrimitive => Symbol => TypeError"); 116 assert.throws(TypeError, function() { 117 BigInt.asIntN(0, { 118 valueOf: function() { 119 return Symbol("1"); 120 } 121 }); 122 }, "ToBigInt: valueOf => Symbol => TypeError"); 123 assert.throws(TypeError, function() { 124 BigInt.asIntN(0, { 125 toString: function() { 126 return Symbol("1"); 127 } 128 }); 129 }, "ToBigInt: toString => Symbol => TypeError"); 130 assert.throws(SyntaxError, function() { 131 BigInt.asIntN(0, "a"); 132 }, "ToBigInt: unparseable BigInt"); 133 assert.throws(SyntaxError, function() { 134 BigInt.asIntN(0, "0b2"); 135 }, "ToBigInt: unparseable BigInt binary"); 136 assert.throws(SyntaxError, function() { 137 BigInt.asIntN(0, Object("0b2")); 138 }, "ToBigInt: unbox object with internal slot => unparseable BigInt binary"); 139 assert.throws(SyntaxError, function() { 140 BigInt.asIntN(0, { 141 [Symbol.toPrimitive]: function() { 142 return "0b2"; 143 } 144 }); 145 }, "ToBigInt: @@toPrimitive => unparseable BigInt binary"); 146 assert.throws(SyntaxError, function() { 147 BigInt.asIntN(0, { 148 valueOf: function() { 149 return "0b2"; 150 } 151 }); 152 }, "ToBigInt: valueOf => unparseable BigInt binary"); 153 assert.throws(SyntaxError, function() { 154 BigInt.asIntN(0, { 155 toString: function() { 156 return "0b2"; 157 } 158 }); 159 }, "ToBigInt: toString => unparseable BigInt binary"); 160 assert.throws(SyntaxError, function() { 161 BigInt.asIntN(0, " 0b2 "); 162 }, "ToBigInt: unparseable BigInt with leading/trailing whitespace"); 163 assert.throws(SyntaxError, function() { 164 BigInt.asIntN(0, "0o8"); 165 }, "ToBigInt: unparseable BigInt octal"); 166 assert.throws(SyntaxError, function() { 167 BigInt.asIntN(0, "0xg"); 168 }, "ToBigInt: unparseable BigInt hex"); 169 assert.throws(SyntaxError, function() { 170 BigInt.asIntN(0, "1n"); 171 }, "ToBigInt: unparseable BigInt due to literal suffix"); 172 173 reportCompare(0, 0);