From 36d22d82aa202bb199967e9512281e9a53db42c9 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 21:33:14 +0200 Subject: Adding upstream version 115.7.0esr. Signed-off-by: Daniel Baumann --- .../tests/non262/TypedArray/sort_modifications.js | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 js/src/tests/non262/TypedArray/sort_modifications.js (limited to 'js/src/tests/non262/TypedArray/sort_modifications.js') diff --git a/js/src/tests/non262/TypedArray/sort_modifications.js b/js/src/tests/non262/TypedArray/sort_modifications.js new file mode 100644 index 0000000000..2a6ed49eb7 --- /dev/null +++ b/js/src/tests/non262/TypedArray/sort_modifications.js @@ -0,0 +1,73 @@ +const TAConstructors = [ + Int8Array, + Uint8Array, + Int16Array, + Uint16Array, + Int32Array, + Uint32Array, + Uint8ClampedArray, + Float32Array, + Float64Array, + BigInt64Array, + BigUint64Array, +]; + +// Use different size classes to catch any implementation-specific +// optimisations. +const sizes = [ + 4, 8, 64, 128, 1024 +]; + +function ToNumeric(TA) { + if (TA === BigInt64Array || TA === BigUint64Array) { + return BigInt; + } + return Number; +} + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : 0; +} + +function descending(a, b) { + return -ascending(a, b); +} + +for (let TA of TAConstructors) { + let toNumeric = ToNumeric(TA); + for (let size of sizes) { + let sorted = new TA(size); + + // Fill with |1..size| and then sort to account for wrap-arounds. + for (let i = 0; i < size; ++i) { + sorted[i] = toNumeric(i + 1); + } + sorted.sort(); + + // Create a copy in descending order. + let ta = new TA(sorted); + ta.sort(descending); + + // Sort the copy in ascending order and on the first call reset all + // elements to zero. + let called = false; + ta.sort(function(a, b) { + if (!called) { + called = true; + ta.fill(toNumeric(0)); + } + return ascending(a, b); + }); + + // Ensure the comparator function was called. + assertEq(called, true); + + // All elements should be sorted correctly. No elements should be zero. + for (let i = 0; i < size; ++i) { + assertEq(ta[i], sorted[i], `${TA.name} at index ${i} for size ${size}`); + } + } +} + +if (typeof reportCompare === "function") + reportCompare(true, true); -- cgit v1.2.3