blob: 50786411bbe9c40834bfce92443b2888f6ab5b35 [file] [log] [blame]
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
load('sort-base.js');
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 SawSeq3(a, tooth, length) {
let count = 0;
while (true) {
for (let i = 0; i < tooth; ++i) {
a.push(tooth - i);
if (++count >= length) return;
}
}
}
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);