| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- 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;
- }
- );
- };
|