node/deps/v8/test/mjsunit/harmony/object-groupby-fast-path-assumptions.js
Michaël Zasso 9d7cd9b864
deps: update V8 to 12.8.374.13
PR-URL: https://github.com/nodejs/node/pull/54077
Reviewed-By: Jiawen Geng <technicalcute@gmail.com>
Reviewed-By: Richard Lau <rlau@redhat.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
2024-08-16 16:03:01 +02:00

44 lines
1.6 KiB
JavaScript

// Copyright 2022 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Test OOB indexing on fast path.
let arr1 = [];
for (let i = 0; i < 32; i++) arr1.push(i);
let popped = false;
let grouped1 = Object.groupBy(arr1, () => {
// Pop all of the elements to trigger right-trimming of the elements
// FixedArray.
for (let i = 0, len = arr1.length; i < len; i++) {
arr1.pop();
}
});
// 'undefined' is the only group.
assertArrayEquals(['undefined'], Object.getOwnPropertyNames(grouped1));
// 0 the only value in the group because the grouping function pops the entire
// array.
let expectedGrouped1 = [0];
assertArrayEquals(expectedGrouped1, grouped1['undefined']);
// Test result ElementsKind deduction on fast path.
//
// Initial Smi array, but due to length truncation result is not a Smi array.
let arr2 = [0,1,2,3,4,5,6,7,8,9];
let grouped2 = Object.groupBy(arr2, () => { arr2.length = 2; });
// 'undefined' is the only group.
assertArrayEquals(['undefined'], Object.getOwnPropertyNames(grouped2));
// 0,1 are the only values in the group because the source array gets truncated
// to length 2.
let expectedGrouped2 = [0,1];
assertArrayEquals(expectedGrouped2, grouped2['undefined']);
// Test holey elements
let arr3 = [0, 1, 2, 3, , , , , 8, 9];
let grouped3 = Object.groupBy(arr3, () => {});
// 'undefined' is the only group.
assertArrayEquals(['undefined'], Object.getOwnPropertyNames(grouped3));
let expectedGrouped3 =
[0, 1, 2, 3, undefined, undefined, undefined, undefined, 8, 9];
assertArrayEquals(expectedGrouped3, grouped3['undefined']);