build(deps-dev): apply updates
[poolifier.git] / benchmarks / internal / bench.mjs
index aa98be858bb66f6f819f4c52c190cab45c48d6fc..8bae6aaf7794ce3d181547a1401ca87455be2c02 100644 (file)
-import { exit } from 'node:process'
+import { writeFileSync } from 'node:fs'
+import { env } from 'node:process'
+// eslint-disable-next-line n/no-unsupported-features/node-builtins
 import { parseArgs } from 'node:util'
 
-import { run } from 'mitata'
-
 import {
   availableParallelism,
   PoolTypes,
-  WorkerTypes
+  WorkerTypes,
 } from '../../lib/index.mjs'
 import { TaskFunctions } from '../benchmarks-types.cjs'
 import {
-  buildPoolifierBenchmarkMitata,
-  runPoolifierBenchmarkBenchmarkJs
+  convertTatamiNgToBmf,
+  runPoolifierBenchmarkTatamiNg,
 } from '../benchmarks-utils.mjs'
 
 const poolSize = availableParallelism()
 const taskExecutions = 1
 const workerData = {
   function: TaskFunctions.factorial,
-  taskSize: 50000
+  taskSize: 1000,
 }
+const benchmarkReportFile = 'benchmark-report.json'
+let benchmarkReport
 
-let fixedThreadPool
-let dynamicThreadPool
-let fixedClusterPool
-let dynamicClusterPool
 switch (
   parseArgs({
     args: process.argv,
     options: {
       type: {
         type: 'string',
-        short: 't'
-      }
+        short: 't',
+      },
     },
     strict: true,
-    allowPositionals: true
+    allowPositionals: true,
   }).values.type
 ) {
-  case 'mitata':
-    fixedThreadPool = buildPoolifierBenchmarkMitata(
-      'FixedThreadPool',
-      WorkerTypes.thread,
-      PoolTypes.fixed,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    dynamicThreadPool = buildPoolifierBenchmarkMitata(
-      'DynamicThreadPool',
-      WorkerTypes.thread,
-      PoolTypes.dynamic,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    fixedClusterPool = buildPoolifierBenchmarkMitata(
-      'FixedClusterPool',
-      WorkerTypes.cluster,
-      PoolTypes.fixed,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    dynamicClusterPool = buildPoolifierBenchmarkMitata(
-      'DynamicClusterPool',
-      WorkerTypes.cluster,
-      PoolTypes.dynamic,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    await run()
-    await fixedThreadPool.destroy()
-    await dynamicThreadPool.destroy()
-    await fixedClusterPool.destroy()
-    await dynamicClusterPool.destroy()
-    break
-  case 'benchmark.js':
+  case 'tatami-ng':
   default:
-    await runPoolifierBenchmarkBenchmarkJs(
-      'FixedThreadPool',
-      WorkerTypes.thread,
-      PoolTypes.fixed,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    await runPoolifierBenchmarkBenchmarkJs(
-      'DynamicThreadPool',
-      WorkerTypes.thread,
-      PoolTypes.dynamic,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    await runPoolifierBenchmarkBenchmarkJs(
-      'FixedClusterPool',
-      WorkerTypes.cluster,
-      PoolTypes.fixed,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
-    )
-    await runPoolifierBenchmarkBenchmarkJs(
-      'DynamicClusterPool',
-      WorkerTypes.cluster,
-      PoolTypes.dynamic,
-      poolSize,
-      {
-        taskExecutions,
-        workerData
-      }
+    benchmarkReport = convertTatamiNgToBmf(
+      await runPoolifierBenchmarkTatamiNg(
+        'FixedThreadPool',
+        WorkerTypes.thread,
+        PoolTypes.fixed,
+        poolSize,
+        {
+          taskExecutions,
+          workerData,
+        }
+      )
     )
+    benchmarkReport = {
+      ...benchmarkReport,
+      ...convertTatamiNgToBmf(
+        await runPoolifierBenchmarkTatamiNg(
+          'DynamicThreadPool',
+          WorkerTypes.thread,
+          PoolTypes.dynamic,
+          poolSize,
+          {
+            taskExecutions,
+            workerData,
+          }
+        )
+      ),
+    }
+    benchmarkReport = {
+      ...benchmarkReport,
+      ...convertTatamiNgToBmf(
+        await runPoolifierBenchmarkTatamiNg(
+          'FixedClusterPool',
+          WorkerTypes.cluster,
+          PoolTypes.fixed,
+          poolSize,
+          {
+            taskExecutions,
+            workerData,
+          }
+        )
+      ),
+    }
+    benchmarkReport = {
+      ...benchmarkReport,
+      ...convertTatamiNgToBmf(
+        await runPoolifierBenchmarkTatamiNg(
+          'DynamicClusterPool',
+          WorkerTypes.cluster,
+          PoolTypes.dynamic,
+          poolSize,
+          {
+            taskExecutions,
+            workerData,
+          }
+        )
+      ),
+    }
+    // eslint-disable-next-line @typescript-eslint/no-unused-expressions
+    env.CI != null &&
+      writeFileSync(benchmarkReportFile, JSON.stringify(benchmarkReport))
     break
 }
-
-exit()