Add WRR worker choice strategy to benchmark
[poolifier.git] / benchmarks / internal / quick-select.js
index dcebaaf81e3f65e103533c808a9e4266ce77e117..cf8f23540d31add705554d9ccb71ac4b3339e0ca 100644 (file)
@@ -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
   )
 }