From e5731d6fa786c3d551ecfa74becb7bc985178c07 Mon Sep 17 00:00:00 2001 From: Richard Gibson Date: Mon, 28 Jul 2025 18:40:29 -0400 Subject: [PATCH] [TypedArray.prototype.copyWithin] Refactor coerced-target-start-end-shrink.js --- .../coerced-target-start-end-shrink.js | 83 ++++++++----------- 1 file changed, 35 insertions(+), 48 deletions(-) diff --git a/test/built-ins/TypedArray/prototype/copyWithin/coerced-target-start-end-shrink.js b/test/built-ins/TypedArray/prototype/copyWithin/coerced-target-start-end-shrink.js index 65270444ad..c58cd1d353 100644 --- a/test/built-ins/TypedArray/prototype/copyWithin/coerced-target-start-end-shrink.js +++ b/test/built-ins/TypedArray/prototype/copyWithin/coerced-target-start-end-shrink.js @@ -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: () => { - rab.resize(2 * ctor.BYTES_PER_ELEMENT); - return 2; - } + 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: () => { - rab.resize(3 * ctor.BYTES_PER_ELEMENT); - return 2; - } + 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: () => { - rab.resize(3 * ctor.BYTES_PER_ELEMENT); - return 2; - } + 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."); }