-import { PoolTypes, WorkerFunctions, WorkerTypes } from './benchmarks-types.mjs'
-
-export const runTest = async (pool, { taskExecutions, workerData }) => {
- return new Promise((resolve, reject) => {
- let executions = 0
- for (let i = 1; i <= taskExecutions; i++) {
- pool
- .execute(workerData)
- .then(() => {
- ++executions
- if (executions === taskExecutions) {
- return resolve({ ok: 1 })
- }
- return null
- })
- .catch(err => {
- console.error(err)
- return reject(err)
- })
- }
- })
-}
-
-export const generateRandomInteger = (
- max = Number.MAX_SAFE_INTEGER,
- min = 0
-) => {
- if (max < min || max < 0 || min < 0) {
- throw new RangeError('Invalid interval')
- }
- max = Math.floor(max)
- if (min != null && min !== 0) {
- min = Math.ceil(min)
- return Math.floor(Math.random() * (max - min + 1)) + min
- }
- return Math.floor(Math.random() * (max + 1))
-}
-
-const jsonIntegerSerialization = n => {
- for (let i = 0; i < n; i++) {
- const o = {
- a: i
- }
- JSON.stringify(o)
- }
-}
-
-/**
- * Intentionally inefficient implementation.
- * @param {number} n - The number of fibonacci numbers to generate.
- * @returns {number} - The nth fibonacci number.
- */
-const fibonacci = n => {
- if (n <= 1) return n
- return fibonacci(n - 1) + fibonacci(n - 2)
-}
-
-/**
- * Intentionally inefficient implementation.
- * @param {number} n - The number to calculate the factorial of.
- * @returns {number} - The factorial of n.
- */
-const factorial = n => {
- if (n === 0) {
- return 1
- }
- return factorial(n - 1) * n
-}
-
-const readWriteFiles = (
- n,
- baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt(
- 281474976710655
- )}`
-) => {
- if (fs.existsSync(baseDirectory) === true) {
- fs.rmSync(baseDirectory, { recursive: true })
- }
- fs.mkdirSync(baseDirectory, { recursive: true })
- for (let i = 0; i < n; i++) {
- const filePath = `${baseDirectory}/${i}`
- fs.writeFileSync(filePath, i.toString(), {
- encoding: 'utf8',
- flag: 'a'
- })
- fs.readFileSync(filePath, 'utf8')
- }
- fs.rmSync(baseDirectory, { recursive: true })
-}
-
-export const executeWorkerFunction = data => {
- switch (data.function) {
- case WorkerFunctions.jsonIntegerSerialization:
- return jsonIntegerSerialization(data.taskSize || 1000)
- case WorkerFunctions.fibonacci:
- return fibonacci(data.taskSize || 1000)
- case WorkerFunctions.factorial:
- return factorial(data.taskSize || 1000)
- case WorkerFunctions.readWriteFiles:
- return readWriteFiles(data.taskSize || 1000)
- default:
- throw new Error('Unknown worker function')
- }
-}