mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-26 03:42:38 +00:00 
			
		
		
		
	 3014e529be
			
		
	
	
		3014e529be
		
	
	
	
	
		
			
			This is no longer specific to the BigInt() constructor, so it shouldn't be mentioning an 'argument' that we might not have.
		
			
				
	
	
		
			68 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| describe("correct behavior", () => {
 | |
|     test("basic functionality", () => {
 | |
|         expect(BigInt).toHaveLength(1);
 | |
|         expect(BigInt.name).toBe("BigInt");
 | |
|     });
 | |
| 
 | |
|     test("constructor with numbers", () => {
 | |
|         expect(BigInt(0)).toBe(0n);
 | |
|         expect(BigInt(1)).toBe(1n);
 | |
|         expect(BigInt(+1)).toBe(1n);
 | |
|         expect(BigInt(-1)).toBe(-1n);
 | |
|         expect(BigInt(123n)).toBe(123n);
 | |
|     });
 | |
| 
 | |
|     test("constructor with strings", () => {
 | |
|         expect(BigInt("")).toBe(0n);
 | |
|         expect(BigInt("0")).toBe(0n);
 | |
|         expect(BigInt("1")).toBe(1n);
 | |
|         expect(BigInt("+1")).toBe(1n);
 | |
|         expect(BigInt("-1")).toBe(-1n);
 | |
|         expect(BigInt("-1")).toBe(-1n);
 | |
|         expect(BigInt("42")).toBe(42n);
 | |
|         expect(BigInt("  \n  00100  \n  ")).toBe(100n);
 | |
|         expect(BigInt("3323214327642987348732109829832143298746432437532197321")).toBe(
 | |
|             3323214327642987348732109829832143298746432437532197321n
 | |
|         );
 | |
|     });
 | |
| 
 | |
|     test("constructor with objects", () => {
 | |
|         expect(BigInt([])).toBe(0n);
 | |
|     });
 | |
| });
 | |
| 
 | |
| describe("errors", () => {
 | |
|     test('cannot be constructed with "new"', () => {
 | |
|         expect(() => {
 | |
|             new BigInt();
 | |
|         }).toThrowWithMessage(TypeError, "BigInt is not a constructor");
 | |
|     });
 | |
| 
 | |
|     test("invalid arguments", () => {
 | |
|         expect(() => {
 | |
|             BigInt(null);
 | |
|         }).toThrowWithMessage(TypeError, "Cannot convert null to BigInt");
 | |
| 
 | |
|         expect(() => {
 | |
|             BigInt(undefined);
 | |
|         }).toThrowWithMessage(TypeError, "Cannot convert undefined to BigInt");
 | |
| 
 | |
|         expect(() => {
 | |
|             BigInt(Symbol());
 | |
|         }).toThrowWithMessage(TypeError, "Cannot convert symbol to BigInt");
 | |
| 
 | |
|         ["foo", "123n", "1+1", {}, function () {}].forEach(value => {
 | |
|             expect(() => {
 | |
|                 BigInt(value);
 | |
|             }).toThrowWithMessage(SyntaxError, `Invalid value for BigInt: ${value}`);
 | |
|         });
 | |
|     });
 | |
| 
 | |
|     test("invalid numeric arguments", () => {
 | |
|         [1.23, Infinity, -Infinity, NaN].forEach(value => {
 | |
|             expect(() => {
 | |
|                 BigInt(value);
 | |
|             }).toThrowWithMessage(RangeError, "Cannot convert non-integral number to BigInt");
 | |
|         });
 | |
|     });
 | |
| });
 |