Commit 94c17edb authored by Marja Hölttä's avatar Marja Hölttä Committed by V8 LUCI CQ

[rab/gsab] Add missing TA.p.map tests

Bug: v8:11111
Change-Id: Id9ea2e4f3e07be509c8e7a29d93ed80036787df1
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3404777Reviewed-by: 's avatarShu-yu Guo <syg@chromium.org>
Reviewed-by: 's avatarJakob Kummerow <jkummerow@chromium.org>
Commit-Queue: Marja Hölttä <marja@chromium.org>
Cr-Commit-Position: refs/heads/main@{#78737}
parent 8628ec4d
......@@ -2732,3 +2732,76 @@ function TestIterationAndGrow(ta, expected, gsab, grow_after,
assertEquals([4, 6], Helper(lengthTrackingWithOffset));
}
})();
(function MapSpeciesCreateGrows() {
let values;
let gsab;
function CollectValues(n, ix, ta) {
if (typeof n == 'bigint') {
values.push(Number(n));
} else {
values.push(n);
}
// We still need to return a valid BigInt / non-BigInt, even if
// n is `undefined`.
if (IsBigIntTypedArray(ta)) {
return 0n;
}
return 0;
}
function Helper(array) {
values = [];
array.map(CollectValues);
return values;
}
for (let ctor of ctors) {
gsab = CreateGrowableSharedArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
const taWrite = new ctor(gsab);
for (let i = 0; i < 4; ++i) {
WriteToTypedArray(taWrite, i, i);
}
let resizeWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (resizeWhenConstructorCalled) {
gsab.grow(6 * ctor.BYTES_PER_ELEMENT);
}
}
};
const fixedLength = new MyArray(gsab, 0, 4);
resizeWhenConstructorCalled = true;
assertEquals([0, 1, 2, 3], Helper(fixedLength));
assertEquals(6 * ctor.BYTES_PER_ELEMENT, gsab.byteLength);
}
for (let ctor of ctors) {
gsab = CreateGrowableSharedArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
const taWrite = new ctor(gsab);
for (let i = 0; i < 4; ++i) {
WriteToTypedArray(taWrite, i, i);
}
let resizeWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (resizeWhenConstructorCalled) {
gsab.grow(6 * ctor.BYTES_PER_ELEMENT);
}
}
};
const lengthTracking = new MyArray(gsab);
resizeWhenConstructorCalled = true;
assertEquals([0, 1, 2, 3], Helper(lengthTracking));
assertEquals(6 * ctor.BYTES_PER_ELEMENT, gsab.byteLength);
}
})();
......@@ -1056,3 +1056,72 @@ d8.file.execute('test/mjsunit/typedarray-helpers.js');
assertEquals([4, undefined], Helper(lengthTrackingWithOffset));
}
})();
(function MapSpeciesCreateDetaches() {
let values;
let rab;
function CollectValues(n, ix, ta) {
if (typeof n == 'bigint') {
values.push(Number(n));
} else {
values.push(n);
}
// We still need to return a valid BigInt / non-BigInt, even if
// n is `undefined`.
if (IsBigIntTypedArray(ta)) {
return 0n;
}
return 0;
}
function Helper(array) {
values = [];
array.map(CollectValues);
return values;
}
for (let ctor of ctors) {
rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
let detachWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (detachWhenConstructorCalled) {
%ArrayBufferDetach(rab);
}
}
};
const fixedLength = new MyArray(rab, 0, 4);
detachWhenConstructorCalled = true;
assertEquals([undefined, undefined, undefined, undefined],
Helper(fixedLength));
}
for (let ctor of ctors) {
rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
const taWrite = new ctor(rab);
for (let i = 0; i < 4; ++i) {
WriteToTypedArray(taWrite, i, i);
}
let detachWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (detachWhenConstructorCalled) {
%ArrayBufferDetach(rab);
}
}
};
const lengthTracking = new MyArray(rab);
detachWhenConstructorCalled = true;
assertEquals([undefined, undefined, undefined, undefined],
Helper(lengthTracking));
}
})();
......@@ -4939,3 +4939,146 @@ function TestIterationAndResize(ta, expected, rab, resize_after,
assertEquals([4, 6], Helper(lengthTrackingWithOffset));
}
})();
(function MapSpeciesCreateShrinks() {
let values;
let rab;
function CollectValues(n, ix, ta) {
if (typeof n == 'bigint') {
values.push(Number(n));
} else {
values.push(n);
}
// We still need to return a valid BigInt / non-BigInt, even if
// n is `undefined`.
if (IsBigIntTypedArray(ta)) {
return 0n;
}
return 0;
}
function Helper(array) {
values = [];
array.map(CollectValues);
return values;
}
for (let ctor of ctors) {
rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
let resizeWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (resizeWhenConstructorCalled) {
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
}
}
};
const fixedLength = new MyArray(rab, 0, 4);
resizeWhenConstructorCalled = true;
assertEquals([undefined, undefined, undefined, undefined],
Helper(fixedLength));
assertEquals(2 * ctor.BYTES_PER_ELEMENT, rab.byteLength);
}
for (let ctor of ctors) {
rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
const taWrite = new ctor(rab);
for (let i = 0; i < 4; ++i) {
WriteToTypedArray(taWrite, i, i);
}
let resizeWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (resizeWhenConstructorCalled) {
rab.resize(2 * ctor.BYTES_PER_ELEMENT);
}
}
};
const lengthTracking = new MyArray(rab);
resizeWhenConstructorCalled = true;
assertEquals([0, 1, undefined, undefined], Helper(lengthTracking));
assertEquals(2 * ctor.BYTES_PER_ELEMENT, rab.byteLength);
}
})();
(function MapSpeciesCreateGrows() {
let values;
let rab;
function CollectValues(n, ix, ta) {
if (typeof n == 'bigint') {
values.push(Number(n));
} else {
values.push(n);
}
// We still need to return a valid BigInt / non-BigInt, even if
// n is `undefined`.
if (IsBigIntTypedArray(ta)) {
return 0n;
}
return 0;
}
function Helper(array) {
values = [];
array.map(CollectValues);
return values;
}
for (let ctor of ctors) {
rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
const taWrite = new ctor(rab);
for (let i = 0; i < 4; ++i) {
WriteToTypedArray(taWrite, i, i);
}
let resizeWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (resizeWhenConstructorCalled) {
rab.resize(6 * ctor.BYTES_PER_ELEMENT);
}
}
};
const fixedLength = new MyArray(rab, 0, 4);
resizeWhenConstructorCalled = true;
assertEquals([0, 1, 2, 3], Helper(fixedLength));
assertEquals(6 * ctor.BYTES_PER_ELEMENT, rab.byteLength);
}
for (let ctor of ctors) {
rab = CreateResizableArrayBuffer(4 * ctor.BYTES_PER_ELEMENT,
8 * ctor.BYTES_PER_ELEMENT);
const taWrite = new ctor(rab);
for (let i = 0; i < 4; ++i) {
WriteToTypedArray(taWrite, i, i);
}
let resizeWhenConstructorCalled = false;
class MyArray extends ctor {
constructor(...params) {
super(...params);
if (resizeWhenConstructorCalled) {
rab.resize(6 * ctor.BYTES_PER_ELEMENT);
}
}
};
const lengthTracking = new MyArray(rab);
resizeWhenConstructorCalled = true;
assertEquals([0, 1, 2, 3], Helper(lengthTracking));
assertEquals(6 * ctor.BYTES_PER_ELEMENT, rab.byteLength);
}
})();
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment