X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=benchmarks%2Finternal%2Fquick-select.js;h=cf8f23540d31add705554d9ccb71ac4b3339e0ca;hb=46eec6ddf0904bb757d333c364885f1f6980caeb;hp=dcebaaf81e3f65e103533c808a9e4266ce77e117;hpb=74750c7f0a8b83b3a579f4d7fc96070ca540b234;p=poolifier.git diff --git a/benchmarks/internal/quick-select.js b/benchmarks/internal/quick-select.js index dcebaaf8..cf8f2354 100644 --- a/benchmarks/internal/quick-select.js +++ b/benchmarks/internal/quick-select.js @@ -1,45 +1,21 @@ const Benchmark = require('benchmark') -const { generateRandomInteger } = require('./benchmark-utils') +const { generateRandomInteger, LIST_FORMATTER } = require('./benchmark-utils') const suite = new Benchmark.Suite() -const LIST_FORMATTER = new Intl.ListFormat('en-US', { - style: 'long', - type: 'conjunction' -}) - -const tasksMap = new Map([ - [0, generateRandomInteger(10)], - [1, generateRandomInteger(10)], - [2, generateRandomInteger(10)], - [3, generateRandomInteger(10)], - [4, generateRandomInteger(10)], - [5, generateRandomInteger(10)], - [6, generateRandomInteger(10)], - [7, generateRandomInteger(10)], - [8, generateRandomInteger(10)], - [9, generateRandomInteger(10)], - [10, generateRandomInteger(10)], - [11, generateRandomInteger(10)], - [12, generateRandomInteger(10)], - [13, generateRandomInteger(10)], - [14, generateRandomInteger(10)], - [15, generateRandomInteger(10)], - [16, generateRandomInteger(10)], - [17, generateRandomInteger(10)], - [18, generateRandomInteger(10)], - [19, generateRandomInteger(10)], - [20, generateRandomInteger(10)], - [21, generateRandomInteger(10)], - [22, generateRandomInteger(10)], - [23, generateRandomInteger(10)], - [24, generateRandomInteger(10)], - [25, generateRandomInteger(10)], - [26, generateRandomInteger(10)], - [27, generateRandomInteger(10)], - [28, generateRandomInteger(10)], - [29, generateRandomInteger(10)] -]) +function generateRandomTasksMap ( + numberOfWorkers, + maxNumberOfTasksPerWorker = 10 +) { + const tasksArray = [] + for (let i = 0; i < numberOfWorkers; i++) { + const task = [i, generateRandomInteger(maxNumberOfTasksPerWorker)] + tasksArray.push(task) + } + return new Map(tasksArray) +} + +const tasksMap = generateRandomTasksMap(60, 20) function loopSelect (tasksMap) { let minValue = Infinity @@ -75,6 +51,10 @@ const defaultPivotIndexSelect = (leftIndex, rightIndex) => { return leftIndex + Math.floor((rightIndex - leftIndex) / 2) } +const randomPivotIndexSelect = (leftIndex, rightIndex) => { + return generateRandomInteger(leftIndex, rightIndex) +} + function swap (array, index1, index2) { const tmp = array[index1] array[index1] = array[index2] @@ -91,10 +71,10 @@ function partition ( const pivotValue = array[pivotIndex] swap(array, pivotIndex, rightIndex) let storeIndex = leftIndex - for (let i = leftIndex; i < rightIndex; i += 1) { + for (let i = leftIndex; i < rightIndex; i++) { if (compare(array[i], pivotValue)) { swap(array, storeIndex, i) - storeIndex += 1 + storeIndex++ } } swap(array, rightIndex, storeIndex) @@ -162,9 +142,7 @@ function quickSelectLoopRandomPivot (tasksMap) { (a, b) => { return a[1] < b[1] }, - (leftIndex, rightIndex) => { - return generateRandomInteger(leftIndex, rightIndex) - } + randomPivotIndexSelect ) } @@ -187,9 +165,7 @@ function quickSelectRecursionRandomPivot (tasksMap) { (a, b) => { return a[1] < b[1] }, - (leftIndex, rightIndex) => { - return generateRandomInteger(leftIndex, rightIndex) - } + randomPivotIndexSelect ) }