mirror of
				https://github.com/tc39/test262.git
				synced 2025-10-31 11:44:31 +01:00 
			
		
		
		
	Test [[Set]] failure near integer limit in Array.prototype.push
This commit is contained in:
		
							parent
							
								
									896994413c
								
							
						
					
					
						commit
						c64db438df
					
				
							
								
								
									
										47
									
								
								test/built-ins/Array/prototype/push/length-near-integer-limit-set-failure.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								test/built-ins/Array/prototype/push/length-near-integer-limit-set-failure.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,47 @@ | |||||||
|  | // Copyright (C) 2020 Alexey Shvayka. All rights reserved.
 | ||||||
|  | // This code is governed by the BSD license found in the LICENSE file.
 | ||||||
|  | 
 | ||||||
|  | /*--- | ||||||
|  | esid: sec-array.prototype.push | ||||||
|  | description: > | ||||||
|  |   A value is inserted in an array-like object whose length property is near the integer limit. | ||||||
|  |   Unsuccessful [[Set]] raises a TypeError. | ||||||
|  | info: | | ||||||
|  |   Array.prototype.push ( ...items ) | ||||||
|  | 
 | ||||||
|  |   [...] | ||||||
|  |   2. Let len be ? LengthOfArrayLike(O). | ||||||
|  |   [...] | ||||||
|  |   4. Let argCount be the number of elements in items. | ||||||
|  |   [...] | ||||||
|  |   6. Repeat, while items is not empty, | ||||||
|  |     a. Remove the first element from items and let E be the value of the element. | ||||||
|  |     b. Perform ? Set(O, ! ToString(len), E, true). | ||||||
|  |     c. Set len to len + 1. | ||||||
|  |   [...] | ||||||
|  | 
 | ||||||
|  |   OrdinarySetWithOwnDescriptor ( O, P, V, Receiver, ownDesc ) | ||||||
|  | 
 | ||||||
|  |   [...] | ||||||
|  |   3. If IsDataDescriptor(ownDesc) is true, then | ||||||
|  |     a. If ownDesc.[[Writable]] is false, return false. | ||||||
|  | ---*/ | ||||||
|  | 
 | ||||||
|  | var arrayLike = { | ||||||
|  |   length: Number.MAX_SAFE_INTEGER - 3, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | Object.defineProperty(arrayLike, Number.MAX_SAFE_INTEGER - 1, { | ||||||
|  |   value: 33, | ||||||
|  |   writable: false, | ||||||
|  |   enumerable: true, | ||||||
|  |   configurable: true, | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | assert.throws(TypeError, function() { | ||||||
|  |   Array.prototype.push.call(arrayLike, 1, 2, 3); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | assert.sameValue(arrayLike[Number.MAX_SAFE_INTEGER - 3], 1); | ||||||
|  | assert.sameValue(arrayLike[Number.MAX_SAFE_INTEGER - 2], 2); | ||||||
|  | assert.sameValue(arrayLike[Number.MAX_SAFE_INTEGER - 1], 33); | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user