-function 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))
-}
-
-function 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.
- */
-function fibonacci (n) {
- if (n <= 1) return 1
- 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.
- */
-function factorial (n) {
- if (n === 0) {
- return 1
- }
- return factorial(n - 1) * n
-}
-
-function 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 })
-}
-
-function 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')
- }
-}
-
-function buildPool (workerType, poolType, poolSize, poolOptions) {