mirror of https://github.com/tc39/test262.git
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…
Reference in New Issue