Source code

Revision control

Copy as Markdown

Other Tools

// 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);