summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/TypedArray/sort_comparators.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/TypedArray/sort_comparators.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/js/src/tests/non262/TypedArray/sort_comparators.js b/js/src/tests/non262/TypedArray/sort_comparators.js
new file mode 100644
index 0000000000..ca190948fc
--- /dev/null
+++ b/js/src/tests/non262/TypedArray/sort_comparators.js
@@ -0,0 +1,32 @@
+// Ensure that sorts finish even if a comparator adds items
+// Note: the array is not expected to be properly sorted.
+let outsideArray = new Int32Array([1, 99, 2]);
+function addingComparator(x, y) {
+ if (x == 99 || y == 99) {
+ outsideArray[0] = 101;
+ outsideArray[outsideArray.length - 1] = 102;
+ }
+ return x - y;
+}
+outsideArray.sort(addingComparator);
+assertEq(outsideArray.every(x => [1, 2, 99, 101, 102].includes(x)), true);
+
+// Ensure that sorts finish even if a comparator calls sort again
+// Note: the array is not expected to be properly sorted.
+outsideArray = new Int32Array([1, 99, 2]);
+function recursiveComparator(x, y) {
+ outsideArray.sort();
+ return x - y;
+}
+outsideArray.sort(recursiveComparator);
+assertEq(outsideArray.every(x => outsideArray.includes(x)), true)
+
+// Ensure that NaN's returned from custom comparators behave as / are converted
+// to +0s.
+let nanComparatorData = [2112, 42, 1111, 34];
+let nanComparatorArray = new Int32Array(nanComparatorData);
+nanComparatorArray.sort((x, y) => NaN);
+assertEq(nanComparatorData.every(x => nanComparatorArray.includes(x)), true);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);