"use strict"; | |
var Q = require("../q"); | |
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); | |
} | |
}); | |
}); |