BigInt.asUintN.js 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. describe("errors", () => {
  2. test("invalid index", () => {
  3. expect(() => {
  4. BigInt.asUintN(-1, 0n);
  5. }).toThrowWithMessage(RangeError, "Index must be a positive integer");
  6. expect(() => {
  7. BigInt.asUintN(Symbol(), 0n);
  8. }).toThrowWithMessage(TypeError, "Cannot convert symbol to number");
  9. });
  10. test("invalid BigInt", () => {
  11. expect(() => {
  12. BigInt.asUintN(1, 1);
  13. }).toThrowWithMessage(TypeError, "Cannot convert number to BigInt");
  14. expect(() => {
  15. BigInt.asUintN(1, Symbol());
  16. }).toThrowWithMessage(TypeError, "Cannot convert symbol to BigInt");
  17. expect(() => {
  18. BigInt.asUintN(1, "foo");
  19. }).toThrowWithMessage(SyntaxError, "Invalid value for BigInt: foo");
  20. });
  21. });
  22. describe("correct behavior", () => {
  23. test("basic functionality", () => {
  24. expect(BigInt.asUintN(0, -2n)).toBe(0n);
  25. expect(BigInt.asUintN(0, -1n)).toBe(0n);
  26. expect(BigInt.asUintN(0, 0n)).toBe(0n);
  27. expect(BigInt.asUintN(0, 1n)).toBe(0n);
  28. expect(BigInt.asUintN(0, 2n)).toBe(0n);
  29. expect(BigInt.asUintN(1, -3n)).toBe(1n);
  30. expect(BigInt.asUintN(1, -2n)).toBe(0n);
  31. expect(BigInt.asUintN(1, -1n)).toBe(1n);
  32. expect(BigInt.asUintN(1, 0n)).toBe(0n);
  33. expect(BigInt.asUintN(1, 1n)).toBe(1n);
  34. expect(BigInt.asUintN(1, 2n)).toBe(0n);
  35. expect(BigInt.asUintN(1, 3n)).toBe(1n);
  36. expect(BigInt.asUintN(2, -3n)).toBe(1n);
  37. expect(BigInt.asUintN(2, -2n)).toBe(2n);
  38. expect(BigInt.asUintN(2, -1n)).toBe(3n);
  39. expect(BigInt.asUintN(2, 0n)).toBe(0n);
  40. expect(BigInt.asUintN(2, 1n)).toBe(1n);
  41. expect(BigInt.asUintN(2, 2n)).toBe(2n);
  42. expect(BigInt.asUintN(2, 3n)).toBe(3n);
  43. expect(BigInt.asUintN(4, -3n)).toBe(13n);
  44. expect(BigInt.asUintN(4, -2n)).toBe(14n);
  45. expect(BigInt.asUintN(4, -1n)).toBe(15n);
  46. expect(BigInt.asUintN(4, 0n)).toBe(0n);
  47. expect(BigInt.asUintN(4, 1n)).toBe(1n);
  48. expect(BigInt.asUintN(4, 2n)).toBe(2n);
  49. expect(BigInt.asUintN(4, 3n)).toBe(3n);
  50. const extremelyBigInt = 123456789123456789123456789123456789123456789123456789n;
  51. expect(BigInt.asUintN(0, extremelyBigInt)).toBe(0n);
  52. expect(BigInt.asUintN(1, extremelyBigInt)).toBe(1n);
  53. expect(BigInt.asUintN(2, extremelyBigInt)).toBe(1n);
  54. expect(BigInt.asUintN(4, extremelyBigInt)).toBe(5n);
  55. expect(BigInt.asUintN(128, extremelyBigInt)).toBe(241220992521549204068304577237384191765n);
  56. expect(BigInt.asUintN(256, extremelyBigInt)).toBe(extremelyBigInt);
  57. expect(BigInt.asUintN(0, -extremelyBigInt)).toBe(0n);
  58. expect(BigInt.asUintN(1, -extremelyBigInt)).toBe(1n);
  59. expect(BigInt.asUintN(2, -extremelyBigInt)).toBe(3n);
  60. expect(BigInt.asUintN(4, -extremelyBigInt)).toBe(11n);
  61. expect(BigInt.asUintN(128, -extremelyBigInt)).toBe(99061374399389259395070030194384019691n);
  62. expect(BigInt.asUintN(256, -extremelyBigInt)).toBe(
  63. 115792089237316195423570861551898784396480861208851440582668460551124006183147n
  64. );
  65. });
  66. });