bigint-tobigint-errors.js 5.0 KB

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