mirror of
https://github.com/tc39/test262.git
synced 2025-09-23 10:08:49 +02:00
[TypedArray.prototype.copyWithin] Refactor coerced-target-start-end-shrink.js
This commit is contained in:
parent
f807ed7c06
commit
e5731d6fa7
@ -9,72 +9,59 @@ includes: [compareArray.js, resizableArrayBufferUtils.js]
|
||||
features: [resizable-arraybuffer]
|
||||
---*/
|
||||
|
||||
const fillWithIndexes = (ta, length) => {
|
||||
for (let i = 0; i < length; ++i) {
|
||||
ta[i] = MayNeedBigInt(ta, i);
|
||||
}
|
||||
return ta;
|
||||
};
|
||||
|
||||
for (let ctor of ctors) {
|
||||
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
||||
const fixedLength = new ctor(rab, 0, 4);
|
||||
const evil = {
|
||||
valueOf: () => {
|
||||
const evil = () => {
|
||||
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
|
||||
return 2;
|
||||
}
|
||||
};
|
||||
assert.throws(TypeError, () => {
|
||||
fixedLength.copyWithin(evil, 0, 1);
|
||||
fixedLength.copyWithin({ valueOf: evil }, 0, 1, ctor.name + " evil target.");
|
||||
});
|
||||
rab.resize(4 * ctor.BYTES_PER_ELEMENT);
|
||||
assert.throws(TypeError, () => {
|
||||
fixedLength.copyWithin(0, evil, 3);
|
||||
fixedLength.copyWithin(0, { valueOf: evil }, 3, ctor.name + " evil start.");
|
||||
});
|
||||
rab.resize(4 * ctor.BYTES_PER_ELEMENT);
|
||||
assert.throws(TypeError, () => {
|
||||
fixedLength.copyWithin(0, 1, evil);
|
||||
fixedLength.copyWithin(0, 1, { valueOf: evil }, ctor.name + " evil end.");
|
||||
});
|
||||
}
|
||||
|
||||
for (let ctor of ctors) {
|
||||
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
||||
const lengthTracking = new ctor(rab);
|
||||
for (let i = 0; i < 4; ++i) {
|
||||
lengthTracking[i] = MayNeedBigInt(lengthTracking, i);
|
||||
}
|
||||
// [0, 1, 2, 3]
|
||||
// ^
|
||||
// target
|
||||
// ^
|
||||
// start
|
||||
const evil = {
|
||||
valueOf: () => {
|
||||
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
|
||||
// [0, 1, 2,] 3]
|
||||
// <=--> dest
|
||||
// <=-> src
|
||||
const evil = () => {
|
||||
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
|
||||
return 2;
|
||||
}
|
||||
};
|
||||
lengthTracking.copyWithin(evil, 0);
|
||||
assert.compareArray(ToNumbers(lengthTracking), [
|
||||
0,
|
||||
1,
|
||||
0
|
||||
]);
|
||||
lengthTracking.copyWithin({ valueOf: evil }, 0);
|
||||
assert.compareArray(ToNumbers(lengthTracking), [0, 1, 0],
|
||||
ctor.name + " truncated copy forward.");
|
||||
}
|
||||
|
||||
for (let ctor of ctors) {
|
||||
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
||||
const lengthTracking = new ctor(rab);
|
||||
for (let i = 0; i < 4; ++i) {
|
||||
lengthTracking[i] = MayNeedBigInt(lengthTracking, i);
|
||||
}
|
||||
// [0, 1, 2, 3]
|
||||
// ^
|
||||
// start
|
||||
// ^
|
||||
// target
|
||||
const evil = {
|
||||
valueOf: () => {
|
||||
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
|
||||
// [0, 1, 2,] 3]
|
||||
// <=--> src
|
||||
// <=-> dest
|
||||
const evil = () => {
|
||||
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
|
||||
return 2;
|
||||
}
|
||||
};
|
||||
lengthTracking.copyWithin(0, evil);
|
||||
assert.compareArray(ToNumbers(lengthTracking), [
|
||||
2,
|
||||
1,
|
||||
2
|
||||
]);
|
||||
lengthTracking.copyWithin(0, { valueOf: evil });
|
||||
assert.compareArray(ToNumbers(lengthTracking), [2, 1, 2],
|
||||
ctor.name + " truncated copy backward.");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user