mirror of
https://github.com/tc39/test262.git
synced 2025-09-23 18:18:37 +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]
|
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) {
|
for (let ctor of ctors) {
|
||||||
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
||||||
const fixedLength = new ctor(rab, 0, 4);
|
const fixedLength = new ctor(rab, 0, 4);
|
||||||
const evil = {
|
const evil = () => {
|
||||||
valueOf: () => {
|
|
||||||
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
|
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
assert.throws(TypeError, () => {
|
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);
|
rab.resize(4 * ctor.BYTES_PER_ELEMENT);
|
||||||
assert.throws(TypeError, () => {
|
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);
|
rab.resize(4 * ctor.BYTES_PER_ELEMENT);
|
||||||
assert.throws(TypeError, () => {
|
assert.throws(TypeError, () => {
|
||||||
fixedLength.copyWithin(0, 1, evil);
|
fixedLength.copyWithin(0, 1, { valueOf: evil }, ctor.name + " evil end.");
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let ctor of ctors) {
|
for (let ctor of ctors) {
|
||||||
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
||||||
const lengthTracking = new ctor(rab);
|
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
|
||||||
for (let i = 0; i < 4; ++i) {
|
// [0, 1, 2,] 3]
|
||||||
lengthTracking[i] = MayNeedBigInt(lengthTracking, i);
|
// <=--> dest
|
||||||
}
|
// <=-> src
|
||||||
// [0, 1, 2, 3]
|
const evil = () => {
|
||||||
// ^
|
|
||||||
// target
|
|
||||||
// ^
|
|
||||||
// start
|
|
||||||
const evil = {
|
|
||||||
valueOf: () => {
|
|
||||||
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
|
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
lengthTracking.copyWithin(evil, 0);
|
lengthTracking.copyWithin({ valueOf: evil }, 0);
|
||||||
assert.compareArray(ToNumbers(lengthTracking), [
|
assert.compareArray(ToNumbers(lengthTracking), [0, 1, 0],
|
||||||
0,
|
ctor.name + " truncated copy forward.");
|
||||||
1,
|
|
||||||
0
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let ctor of ctors) {
|
for (let ctor of ctors) {
|
||||||
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
|
||||||
const lengthTracking = new ctor(rab);
|
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
|
||||||
for (let i = 0; i < 4; ++i) {
|
// [0, 1, 2,] 3]
|
||||||
lengthTracking[i] = MayNeedBigInt(lengthTracking, i);
|
// <=--> src
|
||||||
}
|
// <=-> dest
|
||||||
// [0, 1, 2, 3]
|
const evil = () => {
|
||||||
// ^
|
|
||||||
// start
|
|
||||||
// ^
|
|
||||||
// target
|
|
||||||
const evil = {
|
|
||||||
valueOf: () => {
|
|
||||||
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
|
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
|
||||||
return 2;
|
return 2;
|
||||||
}
|
|
||||||
};
|
};
|
||||||
lengthTracking.copyWithin(0, evil);
|
lengthTracking.copyWithin(0, { valueOf: evil });
|
||||||
assert.compareArray(ToNumbers(lengthTracking), [
|
assert.compareArray(ToNumbers(lengthTracking), [2, 1, 2],
|
||||||
2,
|
ctor.name + " truncated copy backward.");
|
||||||
1,
|
|
||||||
2
|
|
||||||
]);
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user