BigInt.asIntN.js 3.1 KB

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