1 // Copyright (C) 2017 Josh Wolfe. All rights reserved.
2 // This code is governed by the BSD license found in the LICENSE file.
4 description: BigInt.asIntN type coercion for bigint parameter
5 esid: sec-bigint.asintn
7 BigInt.asIntN ( bits, bigint )
9 2. Let bigint ? ToBigInt(bigint).
10 features: [BigInt, computed-property-names, Symbol, Symbol.toPrimitive]
12 assert.sameValue(typeof BigInt, 'function');
13 assert.sameValue(typeof BigInt.asIntN, 'function');
15 assert.throws(TypeError, function () {
17 }, "ToBigInt: no argument => undefined => TypeError");
18 assert.throws(TypeError, function () {
20 }, "ToBigInt: no argument => undefined => TypeError");
22 assert.throws(TypeError, function() {
23 BigInt.asIntN(0, undefined);
24 }, "ToBigInt: undefined => TypeError");
25 assert.throws(TypeError, function() {
27 [Symbol.toPrimitive]: function() {
31 }, "ToBigInt: @@toPrimitive => undefined => TypeError");
32 assert.throws(TypeError, function() {
38 }, "ToBigInt: valueOf => undefined => TypeError");
39 assert.throws(TypeError, function() {
41 toString: function() {
45 }, "ToBigInt: toString => undefined => TypeError");
46 assert.throws(TypeError, function() {
47 BigInt.asIntN(0, null);
48 }, "ToBigInt: null => TypeError");
49 assert.throws(TypeError, function() {
51 [Symbol.toPrimitive]: function() {
55 }, "ToBigInt: @@toPrimitive => null => TypeError");
56 assert.throws(TypeError, function() {
62 }, "ToBigInt: valueOf => null => TypeError");
63 assert.throws(TypeError, function() {
65 toString: function() {
69 }, "ToBigInt: toString => null => TypeError");
70 assert.throws(TypeError, function() {
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() {
78 [Symbol.toPrimitive]: function() {
82 }, "ToBigInt: @@toPrimitive => Number => TypeError");
83 assert.throws(TypeError, function() {
89 }, "ToBigInt: valueOf => Number => TypeError");
90 assert.throws(TypeError, function() {
92 toString: function() {
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() {
111 [Symbol.toPrimitive]: function() {
115 }, "ToBigInt: @@toPrimitive => Symbol => TypeError");
116 assert.throws(TypeError, function() {
118 valueOf: function() {
122 }, "ToBigInt: valueOf => Symbol => TypeError");
123 assert.throws(TypeError, function() {
125 toString: function() {
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() {
141 [Symbol.toPrimitive]: function() {
145 }, "ToBigInt: @@toPrimitive => unparseable BigInt binary");
146 assert.throws(SyntaxError, function() {
148 valueOf: function() {
152 }, "ToBigInt: valueOf => unparseable BigInt binary");
153 assert.throws(SyntaxError, function() {
155 toString: function() {
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");