Skip to content

Commit e5731d6

Browse files
gibson042Ms2ger
authored andcommitted
[TypedArray.prototype.copyWithin] Refactor coerced-target-start-end-shrink.js
1 parent f807ed7 commit e5731d6

File tree

1 file changed

+35
-48
lines changed

1 file changed

+35
-48
lines changed

test/built-ins/TypedArray/prototype/copyWithin/coerced-target-start-end-shrink.js

Lines changed: 35 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,72 +9,59 @@ includes: [compareArray.js, resizableArrayBufferUtils.js]
99
features: [resizable-arraybuffer]
1010
---*/
1111

12+
const fillWithIndexes = (ta, length) => {
13+
for (let i = 0; i < length; ++i) {
14+
ta[i] = MayNeedBigInt(ta, i);
15+
}
16+
return ta;
17+
};
18+
1219
for (let ctor of ctors) {
1320
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
1421
const fixedLength = new ctor(rab, 0, 4);
15-
const evil = {
16-
valueOf: () => {
17-
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
18-
return 2;
19-
}
22+
const evil = () => {
23+
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
24+
return 2;
2025
};
2126
assert.throws(TypeError, () => {
22-
fixedLength.copyWithin(evil, 0, 1);
27+
fixedLength.copyWithin({ valueOf: evil }, 0, 1, ctor.name + " evil target.");
2328
});
2429
rab.resize(4 * ctor.BYTES_PER_ELEMENT);
2530
assert.throws(TypeError, () => {
26-
fixedLength.copyWithin(0, evil, 3);
31+
fixedLength.copyWithin(0, { valueOf: evil }, 3, ctor.name + " evil start.");
2732
});
2833
rab.resize(4 * ctor.BYTES_PER_ELEMENT);
2934
assert.throws(TypeError, () => {
30-
fixedLength.copyWithin(0, 1, evil);
35+
fixedLength.copyWithin(0, 1, { valueOf: evil }, ctor.name + " evil end.");
3136
});
3237
}
38+
3339
for (let ctor of ctors) {
3440
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
35-
const lengthTracking = new ctor(rab);
36-
for (let i = 0; i < 4; ++i) {
37-
lengthTracking[i] = MayNeedBigInt(lengthTracking, i);
38-
}
39-
// [0, 1, 2, 3]
40-
// ^
41-
// target
42-
// ^
43-
// start
44-
const evil = {
45-
valueOf: () => {
46-
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
47-
return 2;
48-
}
41+
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
42+
// [0, 1, 2,] 3]
43+
// <=--> dest
44+
// <=-> src
45+
const evil = () => {
46+
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
47+
return 2;
4948
};
50-
lengthTracking.copyWithin(evil, 0);
51-
assert.compareArray(ToNumbers(lengthTracking), [
52-
0,
53-
1,
54-
0
55-
]);
49+
lengthTracking.copyWithin({ valueOf: evil }, 0);
50+
assert.compareArray(ToNumbers(lengthTracking), [0, 1, 0],
51+
ctor.name + " truncated copy forward.");
5652
}
53+
5754
for (let ctor of ctors) {
5855
const rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT, 8 * ctor.BYTES_PER_ELEMENT);
59-
const lengthTracking = new ctor(rab);
60-
for (let i = 0; i < 4; ++i) {
61-
lengthTracking[i] = MayNeedBigInt(lengthTracking, i);
62-
}
63-
// [0, 1, 2, 3]
64-
// ^
65-
// start
66-
// ^
67-
// target
68-
const evil = {
69-
valueOf: () => {
70-
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
71-
return 2;
72-
}
56+
const lengthTracking = fillWithIndexes(new ctor(rab), 4);
57+
// [0, 1, 2,] 3]
58+
// <=--> src
59+
// <=-> dest
60+
const evil = () => {
61+
rab.resize(3 * ctor.BYTES_PER_ELEMENT);
62+
return 2;
7363
};
74-
lengthTracking.copyWithin(0, evil);
75-
assert.compareArray(ToNumbers(lengthTracking), [
76-
2,
77-
1,
78-
2
79-
]);
64+
lengthTracking.copyWithin(0, { valueOf: evil });
65+
assert.compareArray(ToNumbers(lengthTracking), [2, 1, 2],
66+
ctor.name + " truncated copy backward.");
8067
}

0 commit comments

Comments
 (0)