summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/sort_basics.js
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--js/src/tests/non262/Array/sort_basics.js46
1 files changed, 46 insertions, 0 deletions
diff --git a/js/src/tests/non262/Array/sort_basics.js b/js/src/tests/non262/Array/sort_basics.js
new file mode 100644
index 0000000000..e3011e5c48
--- /dev/null
+++ b/js/src/tests/non262/Array/sort_basics.js
@@ -0,0 +1,46 @@
+// Note: failed runs should include their "SEED" value in error messages,
+// setting "const SEED" to that value will recreate the data from any such run.
+const SEED = (Math.random() * 10) + 1;
+
+// Create an array filled with random values, 'size' is the desired length of
+// the array and 'seed' is an initial value supplied to a pseudo-random number
+// generator.
+function genRandomArray(size, seed) {
+ return Array.from(XorShiftGenerator(seed, size));
+}
+
+function SortTest(size, seed) {
+ let arrOne = genRandomArray(size, seed);
+ let arrTwo = Array.from(arrOne);
+ let arrThree = Array.from(arrOne);
+ let typedArrays = [
+ new Uint8Array(arrOne),
+ new Int32Array(arrOne),
+ new Float32Array(arrOne)
+ ];
+
+ let sorted = Array.from((Int32Array.from(arrOne)).sort());
+
+ // Test numeric comparators against typed array sort.
+ assertDeepEq(sorted, arrTwo.sort((x, y) => (x - y)),
+ `The array is not properly sorted! seed: ${SEED}`);
+
+ // Use multiplication to kill comparator optimization and trigger
+ // self-hosted sorting.
+ assertDeepEq(sorted, arrThree.sort((x, y) => (1*x - 1*y)),
+ `The array is not properly sorted! seed: ${SEED}`);
+
+ // Ensure that typed arrays are also sorted property.
+ for (typedArr of typedArrays) {
+ let sortedTypedArray = Array.prototype.sort.call(typedArr, (x, y) => (1*x - 1*y))
+ assertDeepEq(sorted, Array.from(sortedTypedArray),
+ `The array is not properly sorted! seed: ${SEED}`);
+ }
+}
+
+SortTest(2048, SEED);
+SortTest(16, SEED);
+SortTest(0, SEED);
+
+if (typeof reportCompare === "function")
+ reportCompare(true, true);