UNPKG

sails

Version:

API-driven framework for building realtime apps, using MVC conventions (based on Express and Socket.io)

43 lines (39 loc) 1.4 kB
var Benchmark = require('benchmark'); var _ = require('@sailshq/lodash'); /** * benchmarx() * --------------------------- * @param {String} name * @param {Array} testFns [array of functions] * @param {Function} notifier * @param {Function} done */ module.exports = function benchmarx (name, testFns, done) { Benchmark.options.minSamples = 500; var suite = new Benchmark.Suite({ name: name }); _.each(testFns, function (testFn) { suite = suite.add(testFn.name, { defer: true, fn: function (deferred) { testFn(function _afterRunningTestFn(err){ process.nextTick(function _afterEnsuringAsynchronous(){ if (err) { console.error('An error occured when attempting to benchmark this code:\n',err); // Resolve the deferred either way. } deferred.resolve(); });//</afterwards cb from waiting for nextTick> });//</afterwards cb from running test fn> } });//<suite.add> });//</each testFn> suite.on('cycle', function(event) { console.log(' •',String(event.target), '(avg ' + (event.target.stats.mean * 1000) + ' ms)'); }) .on('complete', function() { console.log('Fastest is ' + this.filter('fastest').map('name')); console.log('Slowest is ' + this.filter('slowest').map('name')); return done(undefined, this); }) .run(); };