mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 19:22:45 +00:00 
			
		
		
		
	LibJS: Add test case for %TypedArray%.prototype.toSpliced
This commit is contained in:
		
							parent
							
								
									45d07f648e
								
							
						
					
					
						commit
						d6d1ae667d
					
				
					 1 changed files with 159 additions and 0 deletions
				
			
		|  | @ -0,0 +1,159 @@ | |||
| const TYPED_ARRAYS = [ | ||||
|     Uint8Array, | ||||
|     Uint8ClampedArray, | ||||
|     Uint16Array, | ||||
|     Uint32Array, | ||||
|     Int8Array, | ||||
|     Int16Array, | ||||
|     Int32Array, | ||||
|     Float32Array, | ||||
|     Float64Array, | ||||
| ]; | ||||
| 
 | ||||
| const BIGINT_TYPED_ARRAYS = [BigUint64Array, BigInt64Array]; | ||||
| 
 | ||||
| describe("normal behavior", () => { | ||||
|     test("length is 2", () => { | ||||
|         TYPED_ARRAYS.forEach(T => { | ||||
|             expect(T.prototype.toSpliced).toHaveLength(2); | ||||
|         }); | ||||
|         BIGINT_TYPED_ARRAYS.forEach(T => { | ||||
|             expect(T.prototype.toSpliced).toHaveLength(2); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     test("no start or delete count argument", () => { | ||||
|         TYPED_ARRAYS.forEach(T => { | ||||
|             const a = new T([1, 2, 3, 4, 5]); | ||||
|             const b = a.toSpliced(); | ||||
|             expect(a).not.toBe(b); | ||||
|             expect(a).toEqual([1, 2, 3, 4, 5]); | ||||
|             expect(b).toEqual([1, 2, 3, 4, 5]); | ||||
|         }); | ||||
|         BIGINT_TYPED_ARRAYS.forEach(T => { | ||||
|             const a = new T([1n, 2n, 3n, 4n, 5n]); | ||||
|             const b = a.toSpliced(); | ||||
|             expect(a).not.toBe(b); | ||||
|             expect(a).toEqual([1n, 2n, 3n, 4n, 5n]); | ||||
|             expect(b).toEqual([1n, 2n, 3n, 4n, 5n]); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     test("only start argument", () => { | ||||
|         TYPED_ARRAYS.forEach(T => { | ||||
|             const a = new T([1, 2, 3, 4, 5]); | ||||
|             const values = [ | ||||
|                 [0, [0, 0, 0, 0, 0]], | ||||
|                 [1, [1, 0, 0, 0, 0]], | ||||
|                 [4, [1, 2, 3, 4, 0]], | ||||
|                 [-1, [1, 2, 3, 4, 0]], | ||||
|                 [999, [1, 2, 3, 4, 5]], | ||||
|                 [Infinity, [1, 2, 3, 4, 5]], | ||||
|             ]; | ||||
|             for (const [start, expected] of values) { | ||||
|                 const b = a.toSpliced(start); | ||||
|                 expect(a).not.toBe(b); | ||||
|                 expect(a).toEqual([1, 2, 3, 4, 5]); | ||||
|                 expect(b).toEqual(expected); | ||||
|             } | ||||
|         }); | ||||
|         BIGINT_TYPED_ARRAYS.forEach(T => { | ||||
|             const a = new T([1n, 2n, 3n, 4n, 5n]); | ||||
|             const values = [ | ||||
|                 [0, [0n, 0n, 0n, 0n, 0n]], | ||||
|                 [1, [1n, 0n, 0n, 0n, 0n]], | ||||
|                 [4, [1n, 2n, 3n, 4n, 0n]], | ||||
|                 [-1, [1n, 2n, 3n, 4n, 0n]], | ||||
|                 [999, [1n, 2n, 3n, 4n, 5n]], | ||||
|                 [Infinity, [1n, 2n, 3n, 4n, 5n]], | ||||
|             ]; | ||||
|             for (const [start, expected] of values) { | ||||
|                 const b = a.toSpliced(start); | ||||
|                 expect(a).not.toBe(b); | ||||
|                 expect(a).toEqual([1n, 2n, 3n, 4n, 5n]); | ||||
|                 expect(b).toEqual(expected); | ||||
|             } | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     test("start and delete count argument", () => { | ||||
|         TYPED_ARRAYS.forEach(T => { | ||||
|             const a = new T([1, 2, 3, 4, 5]); | ||||
|             const values = [ | ||||
|                 [0, 5, [0, 0, 0, 0, 0]], | ||||
|                 [1, 3, [1, 5, 0, 0, 0]], | ||||
|                 [4, 1, [1, 2, 3, 4, 0]], | ||||
|                 [-1, 1, [1, 2, 3, 4, 0]], | ||||
|                 [999, 10, [1, 2, 3, 4, 5]], | ||||
|                 [Infinity, Infinity, [1, 2, 3, 4, 5]], | ||||
|             ]; | ||||
|             for (const [start, deleteCount, expected] of values) { | ||||
|                 const b = a.toSpliced(start, deleteCount); | ||||
|                 expect(a).not.toBe(b); | ||||
|                 expect(a).toEqual([1, 2, 3, 4, 5]); | ||||
|                 expect(b).toEqual(expected); | ||||
|             } | ||||
|         }); | ||||
|         BIGINT_TYPED_ARRAYS.forEach(T => { | ||||
|             const a = new T([1n, 2n, 3n, 4n, 5n]); | ||||
|             const values = [ | ||||
|                 [0, 5, [0n, 0n, 0n, 0n, 0n]], | ||||
|                 [1, 3, [1n, 5n, 0n, 0n, 0n]], | ||||
|                 [4, 1, [1n, 2n, 3n, 4n, 0n]], | ||||
|                 [-1, 1, [1n, 2n, 3n, 4n, 0n]], | ||||
|                 [999, 10, [1n, 2n, 3n, 4n, 5n]], | ||||
|                 [Infinity, Infinity, [1n, 2n, 3n, 4n, 5n]], | ||||
|             ]; | ||||
|             for (const [start, deleteCount, expected] of values) { | ||||
|                 const b = a.toSpliced(start, deleteCount); | ||||
|                 expect(a).not.toBe(b); | ||||
|                 expect(a).toEqual([1n, 2n, 3n, 4n, 5n]); | ||||
|                 expect(b).toEqual(expected); | ||||
|             } | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
| 
 | ||||
| describe("errors", () => { | ||||
|     test("null or undefined this value", () => { | ||||
|         TYPED_ARRAYS.forEach(T => { | ||||
|             expect(() => { | ||||
|                 T.prototype.toSpliced.call(); | ||||
|             }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); | ||||
| 
 | ||||
|             expect(() => { | ||||
|                 T.prototype.toSpliced.call(undefined); | ||||
|             }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); | ||||
| 
 | ||||
|             expect(() => { | ||||
|                 T.prototype.toSpliced.call(null); | ||||
|             }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); | ||||
|         }); | ||||
|         BIGINT_TYPED_ARRAYS.forEach(T => { | ||||
|             expect(() => { | ||||
|                 T.prototype.toSpliced.call(); | ||||
|             }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); | ||||
| 
 | ||||
|             expect(() => { | ||||
|                 T.prototype.toSpliced.call(undefined); | ||||
|             }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); | ||||
| 
 | ||||
|             expect(() => { | ||||
|                 T.prototype.toSpliced.call(null); | ||||
|             }).toThrowWithMessage(TypeError, "ToObject on null or undefined"); | ||||
|         }); | ||||
|     }); | ||||
| 
 | ||||
|     test("invalid typed array length", () => { | ||||
|         TYPED_ARRAYS.forEach(T => { | ||||
|             expect(() => { | ||||
|                 new T({ length: 2 ** 32 - 1 }); | ||||
|             }).toThrowWithMessage(RangeError, "Invalid typed array length"); | ||||
|         }); | ||||
|         BIGINT_TYPED_ARRAYS.forEach(T => { | ||||
|             expect(() => { | ||||
|                 new T({ length: 2 ** 32 - 1 }); | ||||
|             }).toThrowWithMessage(RangeError, "Invalid typed array length"); | ||||
|         }); | ||||
|     }); | ||||
| }); | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Obinna Ikeh
						Obinna Ikeh