'use strict'; const common = require('../common'); const Readable = require('stream').Readable; const bench = common.createBenchmark(main, { n: [1e7], type: ['array', 'sync-generator-with-sync-values', 'sync-generator-with-async-values', 'async-generator'], }); async function main({ n, type }) { let fromArg; switch (type) { case 'array': { fromArg = []; for (let i = 0; i < n; i++) { fromArg.push(`${i}`); } break; } case 'sync-generator-with-sync-values': { fromArg = (function* () { for (let i = 0; i < n; i++) { yield `${i}`; } })(); break; } case 'sync-generator-with-async-values': { fromArg = (function* () { for (let i = 0; i < n; i++) { yield Promise.resolve(`${i}`); } })(); break; } case 'async-generator': { fromArg = (async function* () { for (let i = 0; i < n; i++) { yield `${i}`; } })(); break; } default: { throw new Error(`Unknown type: ${type}`); } } const s = new Readable.from(fromArg); bench.start(); s.on('data', (data) => { // eslint-disable-next-line no-unused-expressions data; }); s.on('close', () => { bench.end(n); }); }