chore: migrate to eslint 9
[poolifier.git] / benchmarks / worker-selection / least.mjs
index f67bebf7464f5ff7cadc394d38279bfc76e804bc..5c9ff1ba6f7698d345c71b9e67a0ab1ad9ee47e2 100644 (file)
@@ -1,7 +1,12 @@
 import { randomInt } from 'node:crypto'
-import Benchmark from 'benchmark'
-import { LIST_FORMATTER } from '../benchmarks-utils.cjs'
 
+import { bench, group, run } from 'tatami-ng'
+
+/**
+ *
+ * @param numberOfWorkers
+ * @param maxNumberOfTasksPerWorker
+ */
 function generateRandomTasksMap (
   numberOfWorkers,
   maxNumberOfTasksPerWorker = 10
@@ -16,9 +21,13 @@ function generateRandomTasksMap (
 
 const tasksMap = generateRandomTasksMap(60, 20)
 
+/**
+ *
+ * @param tasksMap
+ */
 function loopSelect (tasksMap) {
   let minKey
-  let minValue = Infinity
+  let minValue = Number.POSITIVE_INFINITY
   for (const [key, value] of tasksMap) {
     if (value === 0) {
       return key
@@ -30,6 +39,10 @@ function loopSelect (tasksMap) {
   return [minKey, minValue]
 }
 
+/**
+ *
+ * @param tasksMap
+ */
 function arraySortSelect (tasksMap) {
   const tasksArray = Array.from(tasksMap)
   return tasksArray.sort((a, b) => {
@@ -54,12 +67,26 @@ const randomPivotIndexSelect = (leftIndex, rightIndex) => {
   return randomInt(leftIndex, rightIndex)
 }
 
+/**
+ *
+ * @param array
+ * @param index1
+ * @param index2
+ */
 function swap (array, index1, index2) {
   const tmp = array[index1]
   array[index1] = array[index2]
   array[index2] = tmp
 }
 
+/**
+ *
+ * @param array
+ * @param leftIndex
+ * @param rightIndex
+ * @param pivotIndex
+ * @param compare
+ */
 function partition (
   array,
   leftIndex,
@@ -80,6 +107,15 @@ function partition (
   return storeIndex
 }
 
+/**
+ *
+ * @param array
+ * @param k
+ * @param leftIndex
+ * @param rightIndex
+ * @param compare
+ * @param pivotIndexSelect
+ */
 function selectLoop (
   array,
   k,
@@ -102,6 +138,15 @@ function selectLoop (
   }
 }
 
+/**
+ *
+ * @param array
+ * @param k
+ * @param leftIndex
+ * @param rightIndex
+ * @param compare
+ * @param pivotIndexSelect
+ */
 function selectRecursion (
   array,
   k,
@@ -122,6 +167,10 @@ function selectRecursion (
   }
 }
 
+/**
+ *
+ * @param tasksMap
+ */
 function quickSelectLoop (tasksMap) {
   const tasksArray = Array.from(tasksMap)
 
@@ -130,6 +179,10 @@ function quickSelectLoop (tasksMap) {
   })
 }
 
+/**
+ *
+ * @param tasksMap
+ */
 function quickSelectLoopRandomPivot (tasksMap) {
   const tasksArray = Array.from(tasksMap)
 
@@ -145,6 +198,10 @@ function quickSelectLoopRandomPivot (tasksMap) {
   )
 }
 
+/**
+ *
+ * @param tasksMap
+ */
 function quickSelectRecursion (tasksMap) {
   const tasksArray = Array.from(tasksMap)
 
@@ -153,6 +210,10 @@ function quickSelectRecursion (tasksMap) {
   })
 }
 
+/**
+ *
+ * @param tasksMap
+ */
 function quickSelectRecursionRandomPivot (tasksMap) {
   const tasksArray = Array.from(tasksMap)
 
@@ -168,31 +229,25 @@ function quickSelectRecursionRandomPivot (tasksMap) {
   )
 }
 
-new Benchmark.Suite('Least used worker tasks distribution')
-  .add('Loop select', () => {
+group('Least used worker tasks distribution', () => {
+  bench('Loop select', () => {
     loopSelect(tasksMap)
   })
-  .add('Array sort select', () => {
+  bench('Array sort select', () => {
     arraySortSelect(tasksMap)
   })
-  .add('Quick select loop', () => {
+  bench('Quick select loop', () => {
     quickSelectLoop(tasksMap)
   })
-  .add('Quick select loop with random pivot', () => {
+  bench('Quick select loop with random pivot', () => {
     quickSelectLoopRandomPivot(tasksMap)
   })
-  .add('Quick select recursion', () => {
+  bench('Quick select recursion', () => {
     quickSelectRecursion(tasksMap)
   })
-  .add('Quick select recursion with random pivot', () => {
+  bench('Quick select recursion with random pivot', () => {
     quickSelectRecursionRandomPivot(tasksMap)
   })
-  .on('cycle', event => {
-    console.info(event.target.toString())
-  })
-  .on('complete', function () {
-    console.info(
-      'Fastest is ' + LIST_FORMATTER.format(this.filter('fastest').map('name'))
-    )
-  })
-  .run()
+})
+
+await run({ units: true })