'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)
							 |