fix: fix formatting issue.
[poolifier.git] / benchmarks / versus-external-pools / functions / function-to-bench.js
CommitLineData
589f0f1c 1'use strict'
e4bc7a49 2/**
dbca3be9
JB
3 * The task function to execute during pools benchmarks.
4 * NOTE: This function requires to be self-contained, thread-safe and re-entrant (node-worker-threads-pool requirement).
e4bc7a49
JB
5 * @param {*} data The worker data.
6 * @returns {*} The result.
7 */
041dc05b 8const functionToBench = data => {
bea2d6e3
JB
9 const crypto = require('crypto')
10 const fs = require('fs')
e4bc7a49
JB
11 const TaskTypes = {
12 CPU_INTENSIVE: 'CPU_INTENSIVE',
13 IO_INTENSIVE: 'IO_INTENSIVE'
14 }
6c063733 15 data = data || {}
7a6a0a96 16 data.taskType = data.taskType || TaskTypes.CPU_INTENSIVE
6c063733 17 data.taskSize = data.taskSize || 5000
670734fc
JB
18 const baseDirectory = `/tmp/poolifier-benchmarks/${crypto.randomInt(
19 281474976710655
20 )}`
6c063733 21 switch (data.taskType) {
7a6a0a96 22 case TaskTypes.CPU_INTENSIVE:
6c063733 23 // CPU intensive task
e4bc7a49
JB
24 for (let i = 0; i < data.taskSize; i++) {
25 const o = {
26 a: i
27 }
28 JSON.stringify(o)
29 }
6c063733 30 return { ok: 1 }
7a6a0a96
JB
31 case TaskTypes.IO_INTENSIVE:
32 // IO intensive task
670734fc
JB
33 if (fs.existsSync(baseDirectory) === true) {
34 fs.rmSync(baseDirectory, { recursive: true })
e4bc7a49 35 }
670734fc 36 fs.mkdirSync(baseDirectory, { recursive: true })
7a6a0a96 37 for (let i = 0; i < data.taskSize; i++) {
e4bc7a49
JB
38 const filePath = `${baseDirectory}/${i}`
39 fs.writeFileSync(filePath, i.toString(), {
40 encoding: 'utf8',
41 flag: 'a'
42 })
43 fs.readFileSync(filePath, 'utf8')
7a6a0a96 44 }
670734fc 45 fs.rmSync(baseDirectory, { recursive: true })
7a6a0a96 46 return { ok: 1 }
6c063733
JB
47 default:
48 throw new Error(`Unknown task type: ${data.taskType}`)
9f7e7a99 49 }
50}
440dd7d7
JB
51
52module.exports = functionToBench