'use strict'; const max = 1000000; const fastqueue = require('./')(worker, 1); const { promisify } = require('util'); const immediate = promisify(setImmediate); const qPromise = require('./').promise(immediate, 1); const async = require('async'); const neo = require('neo-async'); const asyncqueue = async.queue(worker, 1); const neoqueue = neo.queue(worker, 1); function bench(func, done) { const key = max + '*' + func.name; let count = -1; console.time(key); end(); function end() { if (++count < max) { func(end); } else { console.timeEnd(key); if (done) { done(); } } } } function benchFastQ(done) { fastqueue.push(42, done); } function benchAsyncQueue(done) { asyncqueue.push(42, done); } function benchNeoQueue(done) { neoqueue.push(42, done); } function worker(arg, cb) { setImmediate(cb); } function benchSetImmediate(cb) { worker(42, cb); } function benchFastQPromise(done) { qPromise.push(42).then(function () { done(); }, done); } function runBench(done) { async.eachSeries( [ benchSetImmediate, benchFastQ, benchNeoQueue, benchAsyncQueue, benchFastQPromise, ], bench, done ); } runBench(runBench);