diff options
Diffstat (limited to 'deps/v8/test/js-perf-test/ArraySort/sort-presorted.js')
-rw-r--r-- | deps/v8/test/js-perf-test/ArraySort/sort-presorted.js | 107 |
1 files changed, 98 insertions, 9 deletions
diff --git a/deps/v8/test/js-perf-test/ArraySort/sort-presorted.js b/deps/v8/test/js-perf-test/ArraySort/sort-presorted.js index a0a55023a1..50786411bb 100644 --- a/deps/v8/test/js-perf-test/ArraySort/sort-presorted.js +++ b/deps/v8/test/js-perf-test/ArraySort/sort-presorted.js @@ -4,16 +4,105 @@ load('sort-base.js'); -function SetupPreSorted() { - CreatePackedSmiArray(); - array_to_sort.sort(); +const kLength = 2e4; +const kLengthHalf = kLength >>> 1; + +function SortAsc() { + array_to_sort.sort(cmp_smaller); +} + +function Up(a, length) { + for (let i = 0; i < length; ++i) { + a.push(i); + } +} + +function Down(a, length) { + for (let i = 0; i < length; ++i) { + a.push(length - i); + } +} + +function SawSeq(a, tooth, length) { + let count = 0; + while (true) { + for (let i = 0; i < tooth; ++i) { + a.push(i); + if (++count >= length) return; + } + } +} + +function SawSeq2(a, tooth, length) { + let count = 0; + while (true) { + for (let i = 0; i < tooth; ++i) { + a.push(i); + if (++count >= length) return; + } + for (let i = 0; i < tooth; ++i) { + a.push(tooth - i); + if (++count >= length) return; + } + } } -function SetupPreSortedReversed() { - CreatePackedSmiArray(); - array_to_sort.sort(); - array_to_sort.reverse(); +function SawSeq3(a, tooth, length) { + let count = 0; + while (true) { + for (let i = 0; i < tooth; ++i) { + a.push(tooth - i); + if (++count >= length) return; + } + } } -benchy('PackedSmiPreSorted', Sort, SetupPreSorted); -benchy('PackedSmiPreSortedReversed', Sort, SetupPreSortedReversed); +function Random(a, length) { + for (let i = 0; i < length; ++i) { + a.push(Math.floor(Math.random() * length)); + } +} + +function TearDown() { + // Sanity check that the array is sorted. + let length = array_to_sort.length - 1; + for (let i = 0; i < length; ++i) { + if (array_to_sort[i] > array_to_sort[i + 1]) { + throw "Not sorted correctly: i = " + i; + } + } + array_to_sort = []; +} + +let SetupSaw1000 = () => SawSeq(array_to_sort, 1000, kLength); +let SetupSaw500 = () => SawSeq(array_to_sort, 500, kLength); +let SetupSaw200 = () => SawSeq(array_to_sort, 200, kLength); +let SetupSaw200Sym = () => SawSeq2(array_to_sort, 200, kLength); +let SetupSaw200Down = () => SawSeq3(array_to_sort, 200, kLength); + +function SetupPreSortedHalfs(firstfn, secondfn) { + array_to_sort = []; + firstfn(array_to_sort, kLengthHalf); + secondfn(array_to_sort, kLengthHalf); +} + +let SetupUpDown = () => SetupPreSortedHalfs(Up, Down); +let SetupUpUp = () => SetupPreSortedHalfs(Up, Up); +let SetupDownDown = () => SetupPreSortedHalfs(Down, Down); +let SetupDownUp = () => SetupPreSortedHalfs(Down, Up); + +createSortSuite( + 'Random', 1000, SortAsc, () => Random(array_to_sort, kLength), TearDown); +createSortSuite( + 'Up', 1000, SortAsc, () => Up(array_to_sort, kLength), TearDown); +createSortSuite( + 'Down', 1000, SortAsc, () => Down(array_to_sort, kLength), TearDown); +createSortSuite('Saw1000', 1000, SortAsc, SetupSaw1000, TearDown); +createSortSuite('Saw500', 1000, SortAsc, SetupSaw500, TearDown); +createSortSuite('Saw200', 1000, SortAsc, SetupSaw200, TearDown); +createSortSuite('Saw200Symmetric', 1000, SortAsc, SetupSaw200Sym, TearDown); +createSortSuite('Saw200Down', 1000, SortAsc, SetupSaw200Down, TearDown); +createSortSuite('UpDown', 1000, SortAsc, SetupUpDown, TearDown); +createSortSuite('UpUp', 1000, SortAsc, SetupUpUp, TearDown); +createSortSuite('DownDown', 1000, SortAsc, SetupDownDown, TearDown); +createSortSuite('DownUp', 1000, SortAsc, SetupDownUp, TearDown); |