tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

sort_basics.js (1698B)


      1 // Note: failed runs should include their "SEED" value in error messages,
      2 // setting "const SEED" to that value will recreate the data from any such run.
      3 const SEED = (Math.random() * 10) + 1;
      4 
      5 // Create an array filled with random values, 'size' is the desired length of
      6 // the array and 'seed' is an initial value supplied to a pseudo-random number
      7 // generator.
      8 function genRandomArray(size, seed) {
      9    return Array.from(XorShiftGenerator(seed, size));
     10 }
     11 
     12 function SortTest(size, seed) {
     13    let arrOne       = genRandomArray(size, seed);
     14    let arrTwo       = Array.from(arrOne);
     15    let arrThree     = Array.from(arrOne);
     16    let typedArrays  = [
     17        new Uint8Array(arrOne),
     18        new Int32Array(arrOne),
     19        new Float32Array(arrOne)
     20    ];
     21 
     22    let sorted = Array.from((Int32Array.from(arrOne)).sort());
     23 
     24    // Test numeric comparators against typed array sort.
     25    assertDeepEq(sorted, arrTwo.sort((x, y) => (x - y)),
     26                 `The array is not properly sorted! seed: ${SEED}`);
     27 
     28    // Use multiplication to kill comparator optimization and trigger
     29    // self-hosted sorting.
     30    assertDeepEq(sorted, arrThree.sort((x, y) => (1*x - 1*y)),
     31                 `The array is not properly sorted! seed: ${SEED}`);
     32 
     33    // Ensure that typed arrays are also sorted property.
     34    for (typedArr of typedArrays) {
     35        let sortedTypedArray = Array.prototype.sort.call(typedArr, (x, y) => (1*x - 1*y))
     36        assertDeepEq(sorted, Array.from(sortedTypedArray),
     37                     `The array is not properly sorted! seed: ${SEED}`);
     38    }
     39 }
     40 
     41 SortTest(2048, SEED);
     42 SortTest(16, SEED);
     43 SortTest(0, SEED);
     44 
     45 if (typeof reportCompare === "function")
     46    reportCompare(true, true);