text: "use strict";
  
  var Q = require("../lib/q").default;
  var fs = require("fs");
  
  suite("A single simple async operation", function () {
      bench("with an immediately-fulfilled promise", function (done) {
          Q().then(done);
      });
  
      bench("with direct setImmediate usage", function (done) {
          setImmediate(done);
      });
  
      bench("with direct setTimeout(…, 0)", function (done) {
          setTimeout(done, 0);
      });
  });
  
  suite("A fs.readFile", function () {
      var denodeified = Q.denodeify(fs.readFile);
  
      set("iterations", 1000);
      set("delay", 1000);
  
      bench("directly, with callbacks", function (done) {
          fs.readFile(__filename, done);
      });
  
      bench("with Q.nfcall", function (done) {
          Q.nfcall(fs.readFile, __filename).then(done);
      });
  
      bench("with a Q.denodeify'ed version", function (done) {
          denodeified(__filename).then(done);
      });
  
      bench("with manual usage of deferred.makeNodeResolver", function (done) {
          var deferred = Q.defer();
          fs.readFile(__filename, deferred.makeNodeResolver());
          deferred.promise.then(done);
      });
  });
  
  suite("1000 operations in parallel", function () {
      function makeCounter(desiredCount, ultimateCallback) {
          var soFar = 0;
          return function () {
              if (++soFar === desiredCount) {
                  ultimateCallback();
              }
          };
      }
      var numberOfOps = 1000;
  
      bench("with immediately-fulfilled promises", function (done) {
          var counter = makeCounter(numberOfOps, done);
  
          for (var i = 0; i < numberOfOps; ++i) {
              Q().then(counter);
          }
      });
  
      bench("with direct setImmediate usage", function (done) {
          var counter = makeCounter(numberOfOps, done);
  
          for (var i = 0; i < numberOfOps; ++i) {
              setImmediate(counter);
          }
      });
  });
  