summaryrefslogtreecommitdiffstats
path: root/js/src/tests/non262/Array/sort_basics.js
blob: e3011e5c483fc2e8a8f3ef87263cb59cd5bea3b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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);