text: 'use strict'
  
  var max = 1000000
  var fastqueue = require('./')(worker, 1)
  var { promisify } = require('util')
  var immediate = promisify(setImmediate)
  var qPromise = require('./').promise(immediate, 1)
  var async = require('async')
  var neo = require('neo-async')
  var asyncqueue = async.queue(worker, 1)
  var neoqueue = neo.queue(worker, 1)
  
  function bench (func, done) {
    var key = max + '*' + func.name
    var 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)
  