Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RAB: Adds missing Array.prototype.filter 'shrink' tests plus typesetting #4139

Merged
merged 2 commits into from
Jul 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ let resizeTo;
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset
// before calling this.
function ResizeBufferMidIteration(n) {
function ResizeMidIteration(n) {
// Returns true by default.
return CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
}
Expand All @@ -35,7 +35,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(fixedLength, ResizeBufferMidIteration));
assert(Array.prototype.every.call(fixedLength, ResizeMidIteration));
assert.compareArray(values, [
0,
2,
Expand All @@ -49,7 +49,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(fixedLengthWithOffset, ResizeBufferMidIteration));
assert(Array.prototype.every.call(fixedLengthWithOffset, ResizeMidIteration));
assert.compareArray(values, [
4,
6
Expand All @@ -61,7 +61,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(lengthTracking, ResizeBufferMidIteration));
assert(Array.prototype.every.call(lengthTracking, ResizeMidIteration));
assert.compareArray(values, [
0,
2,
Expand All @@ -75,7 +75,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(lengthTrackingWithOffset, ResizeBufferMidIteration));
assert(Array.prototype.every.call(lengthTrackingWithOffset, ResizeMidIteration));
assert.compareArray(values, [
4,
6
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ let resizeTo;
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset
// before calling this.
function ResizeBufferMidIteration(n) {
function ResizeMidIteration(n) {
// Returns true by default.
return CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
}
Expand All @@ -35,7 +35,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(fixedLength, ResizeBufferMidIteration));
assert(Array.prototype.every.call(fixedLength, ResizeMidIteration));
assert.compareArray(values, [
0,
2
Expand All @@ -47,7 +47,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(fixedLengthWithOffset, ResizeBufferMidIteration));
assert(Array.prototype.every.call(fixedLengthWithOffset, ResizeMidIteration));
assert.compareArray(values, [4]);
}
for (let ctor of ctors) {
Expand All @@ -56,7 +56,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(lengthTracking, ResizeBufferMidIteration));
assert(Array.prototype.every.call(lengthTracking, ResizeMidIteration));
assert.compareArray(values, [
0,
2,
Expand All @@ -69,6 +69,6 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert(Array.prototype.every.call(lengthTrackingWithOffset, ResizeBufferMidIteration));
assert(Array.prototype.every.call(lengthTrackingWithOffset, ResizeMidIteration));
assert.compareArray(values, [4]);
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
/*---
esid: sec-array.prototype.filter
description: >
Array.p.filter behaves correctly on receivers backed by resizable
buffers that grow mid-iteration
Array.p.filter behaves correctly on TypedArrays backed by resizable buffers
that grow mid-iteration.
includes: [compareArray.js, resizableArrayBufferUtils.js]
features: [resizable-arraybuffer]
---*/
Expand All @@ -19,7 +19,7 @@ let resizeTo;
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset
// before calling this.
function ResizeBufferMidIteration(n) {
function ResizeMidIteration(n) {
CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
return false;
}
Expand All @@ -36,7 +36,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(fixedLength, ResizeBufferMidIteration)), []);
assert.compareArray(ToNumbers(Array.prototype.filter.call(fixedLength, ResizeMidIteration)), []);
assert.compareArray(values, [
0,
2,
Expand All @@ -50,7 +50,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(fixedLengthWithOffset, ResizeBufferMidIteration)), []);
assert.compareArray(ToNumbers(Array.prototype.filter.call(fixedLengthWithOffset, ResizeMidIteration)), []);
assert.compareArray(values, [
4,
6
Expand All @@ -62,7 +62,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(lengthTracking, ResizeBufferMidIteration)), []);
assert.compareArray(ToNumbers(Array.prototype.filter.call(lengthTracking, ResizeMidIteration)), []);
assert.compareArray(values, [
0,
2,
Expand All @@ -76,10 +76,9 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(lengthTrackingWithOffset, ResizeBufferMidIteration)), []);
assert.compareArray(ToNumbers(Array.prototype.filter.call(lengthTrackingWithOffset, ResizeMidIteration)), []);
assert.compareArray(values, [
4,
6
]);
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
// Copyright 2023 the V8 project authors. All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
esid: sec-%array%.prototype.filter
description: >
Array.p.filter behaves correctly on TypedArrays backed by resizable buffers
that shrink mid-iteration.
includes: [compareArray.js, resizableArrayBufferUtils.js]
features: [resizable-arraybuffer]
---*/

let values;
let rab;
let resizeAfter;
let resizeTo;
// Collects the view of the resizable array buffer rab into values, with an
// iteration during which, after resizeAfter steps, rab is resized to length
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset
// before calling this.
function ResizeMidIteration(n) {
CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
return false;
}

// Orig. array: [0, 2, 4, 6]
// [0, 2, 4, 6] << fixedLength
// [4, 6] << fixedLengthWithOffset
// [0, 2, 4, 6, ...] << lengthTracking
// [4, 6, ...] << lengthTrackingWithOffset

for (let ctor of ctors) {
rab = CreateRabForTest(ctor);
const fixedLength = new ctor(rab, 0, 4);
values = [];
resizeAfter = 2;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(fixedLength, ResizeMidIteration)),[]);
assert.compareArray(values, [
0,
2
]);
}
for (let ctor of ctors) {
rab = CreateRabForTest(ctor);
const fixedLengthWithOffset = new ctor(rab, 2 * ctor.BYTES_PER_ELEMENT, 2);
values = [];
resizeAfter = 1;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(fixedLengthWithOffset, ResizeMidIteration)),[]);
assert.compareArray(values, [
4
]);
}
for (let ctor of ctors) {
rab = CreateRabForTest(ctor);
const lengthTracking = new ctor(rab, 0);
values = [];
resizeAfter = 2;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(lengthTracking, ResizeMidIteration)),[]);
assert.compareArray(values, [
0,
2,
4
]);
}
for (let ctor of ctors) {
rab = CreateRabForTest(ctor);
const lengthTrackingWithOffset = new ctor(rab, 2 * ctor.BYTES_PER_ELEMENT);
values = [];
resizeAfter = 1;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.compareArray(ToNumbers(Array.prototype.filter.call(lengthTrackingWithOffset, ResizeMidIteration)),[]);
assert.compareArray(values, [
4
]);
}
3 changes: 1 addition & 2 deletions test/built-ins/Array/prototype/filter/resizable-buffer.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
/*---
esid: sec-array.prototype.filter
description: >
Array.p.filter behaves correctly on receivers backed by resizable
buffers
Array.p.filter behaves correctly on TypedArrays backed by resizable buffers.
includes: [compareArray.js, resizableArrayBufferUtils.js]
features: [resizable-arraybuffer]
---*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ let resizeTo;
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset
// before calling this.
function ResizeBufferMidIteration(n) {
function ResizeMidIteration(n) {
CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
return false;
}
Expand All @@ -36,7 +36,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.find.call(fixedLength, ResizeBufferMidIteration), undefined);
assert.sameValue(Array.prototype.find.call(fixedLength, ResizeMidIteration), undefined);
assert.compareArray(values, [
0,
2,
Expand All @@ -50,7 +50,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.find.call(fixedLengthWithOffset, ResizeBufferMidIteration), undefined);
assert.sameValue(Array.prototype.find.call(fixedLengthWithOffset, ResizeMidIteration), undefined);
assert.compareArray(values, [
4,
6
Expand All @@ -62,7 +62,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.find.call(lengthTracking, ResizeBufferMidIteration), undefined);
assert.sameValue(Array.prototype.find.call(lengthTracking, ResizeMidIteration), undefined);
assert.compareArray(values, [
0,
2,
Expand All @@ -76,7 +76,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.find.call(lengthTrackingWithOffset, ResizeBufferMidIteration), undefined);
assert.sameValue(Array.prototype.find.call(lengthTrackingWithOffset, ResizeMidIteration), undefined);
assert.compareArray(values, [
4,
6
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ let resizeTo;
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset before
// calling this.
function ResizeBufferMidIteration(n) {
function ResizeMidIteration(n) {
CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
return false;
}
Expand All @@ -35,7 +35,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(fixedLength, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(fixedLength, ResizeMidIteration), -1);
assert.compareArray(values, [
0,
2,
Expand All @@ -49,7 +49,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(fixedLengthWithOffset, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(fixedLengthWithOffset, ResizeMidIteration), -1);
assert.compareArray(values, [
4,
6
Expand All @@ -61,7 +61,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(lengthTracking, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(lengthTracking, ResizeMidIteration), -1);
assert.compareArray(values, [
0,
2,
Expand All @@ -75,7 +75,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 5 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(lengthTrackingWithOffset, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(lengthTrackingWithOffset, ResizeMidIteration), -1);
assert.compareArray(values, [
4,
6
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ let resizeTo;
// resizeTo. To be called by a method of the view being collected.
// Note that rab, values, resizeAfter, and resizeTo may need to be reset before
// calling this.
function ResizeBufferMidIteration(n) {
function ResizeMidIteration(n) {
CollectValuesAndResize(n, values, rab, resizeAfter, resizeTo);
return false;
}
Expand All @@ -35,7 +35,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(fixedLength, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(fixedLength, ResizeMidIteration), -1);
assert.compareArray(values, [
0,
2,
Expand All @@ -49,7 +49,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(fixedLengthWithOffset, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(fixedLengthWithOffset, ResizeMidIteration), -1);
assert.compareArray(values, [
4,
undefined
Expand All @@ -61,7 +61,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 2;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(lengthTracking, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(lengthTracking, ResizeMidIteration), -1);
assert.compareArray(values, [
0,
2,
Expand All @@ -75,7 +75,7 @@ for (let ctor of ctors) {
values = [];
resizeAfter = 1;
resizeTo = 3 * ctor.BYTES_PER_ELEMENT;
assert.sameValue(Array.prototype.findIndex.call(lengthTrackingWithOffset, ResizeBufferMidIteration), -1);
assert.sameValue(Array.prototype.findIndex.call(lengthTrackingWithOffset, ResizeMidIteration), -1);
assert.compareArray(values, [
4,
undefined
Expand Down
Loading
Loading