|
|
@@ -0,0 +1,64 @@
|
|
|
+var path = require("path"),
|
|
|
+ async = require("async"),
|
|
|
+ aggregate = require("../../../");
|
|
|
+
|
|
|
+module.exports = function _runner(opts) {
|
|
|
+
|
|
|
+ var testName = path.basename(opts.module.filename),
|
|
|
+ testTime = Date.now();
|
|
|
+
|
|
|
+ // run for different input sizes
|
|
|
+ async.map(
|
|
|
+ opts.sizes,
|
|
|
+ function mapper(size, nextSize) {
|
|
|
+
|
|
|
+ var datas = [];
|
|
|
+ for (var i = 0, n = size; i < n; i++) {
|
|
|
+ var input = opts.generateInputDoc(i, size);
|
|
|
+ if (input instanceof Array) {
|
|
|
+ datas.push.apply(datas, input);
|
|
|
+ } else {
|
|
|
+ datas.push(input);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // run for a couple of iterations
|
|
|
+ var iterations = Array.apply(null, new Array(opts.nIterations)).map(Number);
|
|
|
+ async.map(
|
|
|
+ iterations,
|
|
|
+ function mapper(iteration, nextIteration) {
|
|
|
+ var t0 = Date.now();
|
|
|
+ aggregate(opts.pipeline, datas, function(err, docs) {
|
|
|
+ if (err) return nextIteration(err);
|
|
|
+ return nextIteration(null, {
|
|
|
+ ms: Date.now() - t0,
|
|
|
+ //docs: docs.length,
|
|
|
+ //doc0: docs[0],
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+ function done(err, iterations) {
|
|
|
+ if (err) return nextSize(err);
|
|
|
+ // get avg
|
|
|
+ var sum = 0;
|
|
|
+ iterations.forEach(function(iteration) {
|
|
|
+ sum += iteration.ms;
|
|
|
+ });
|
|
|
+ // report results
|
|
|
+ console.log("%j", {
|
|
|
+ n: testName,
|
|
|
+ t: testTime,
|
|
|
+ inputs: size,
|
|
|
+ avgMs: sum / iterations.length,
|
|
|
+ iterations: iterations,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+ },
|
|
|
+ function done(err, sizes) {
|
|
|
+ if (err) throw err;
|
|
|
+ }
|
|
|
+ );
|
|
|
+
|
|
|
+};
|