docs: generate documentation
[poolifier.git] / benchmarks / internal / bench.mjs
index b59514d225b45adf149f011798156af1a7bcf675..3f467f9ea49689d642a4b9eae087416d806a9735 100644 (file)
@@ -1,4 +1,7 @@
-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 {
   availableParallelism,
@@ -6,61 +9,93 @@ import {
   WorkerTypes
 } from '../../lib/index.mjs'
 import { TaskFunctions } from '../benchmarks-types.cjs'
-import { runPoolifierPoolBenchmark } from '../benchmarks-utils.cjs'
+import {
+  convertTatamiNgToBmf,
+  runPoolifierBenchmarkTatamiNg
+} from '../benchmarks-utils.mjs'
 
 const poolSize = availableParallelism()
 const taskExecutions = 1
 const workerData = {
-  function: TaskFunctions.jsonIntegerSerialization,
+  function: TaskFunctions.factorial,
   taskSize: 1000
 }
+const benchmarkReportFile = 'benchmark-report.json'
+let benchmarkReport
 
-// FixedThreadPool
-await runPoolifierPoolBenchmark(
-  'FixedThreadPool',
-  WorkerTypes.thread,
-  PoolTypes.fixed,
-  poolSize,
-  {
-    taskExecutions,
-    workerData
-  }
-)
-
-// DynamicThreadPool
-await runPoolifierPoolBenchmark(
-  'DynamicThreadPool',
-  WorkerTypes.thread,
-  PoolTypes.dynamic,
-  poolSize,
-  {
-    taskExecutions,
-    workerData
-  }
-)
-
-// FixedClusterPool
-await runPoolifierPoolBenchmark(
-  'FixedClusterPool',
-  WorkerTypes.cluster,
-  PoolTypes.fixed,
-  poolSize,
-  {
-    taskExecutions,
-    workerData
-  }
-)
-
-// DynamicClusterPool
-await runPoolifierPoolBenchmark(
-  'DynamicClusterPool',
-  WorkerTypes.cluster,
-  PoolTypes.dynamic,
-  poolSize,
-  {
-    taskExecutions,
-    workerData
-  }
-)
-
-exit()
+switch (
+  parseArgs({
+    args: process.argv,
+    options: {
+      type: {
+        type: 'string',
+        short: 't'
+      }
+    },
+    strict: true,
+    allowPositionals: true
+  }).values.type
+) {
+  case 'tatami-ng':
+  default:
+    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
+          }
+        )
+      )
+    }
+    env.CI != null &&
+      writeFileSync(benchmarkReportFile, JSON.stringify(benchmarkReport))
+    break
+}