2016-01-13 03:30:35 +00:00
|
|
|
/* bm.js (C) 2014-present SheetJS -- http://sheetjs.com */
|
2014-06-16 21:27:47 +00:00
|
|
|
var Benchmark = require('benchmark');
|
|
|
|
var c = require('ansi')(process.stdout);
|
|
|
|
|
2014-06-21 02:15:23 +00:00
|
|
|
function test_end(e) { c.horizontalAbsolute(0).write("✓ "+e.target); c.write('\n'); }
|
2014-06-16 21:27:47 +00:00
|
|
|
|
2016-06-16 20:49:46 +00:00
|
|
|
function suite_end() {
|
|
|
|
var o = this.filter('fastest');
|
|
|
|
var m = typeof o.pluck === 'undefined' ? o.map('name') : o.pluck('name');
|
|
|
|
console.log('Fastest is ' + m);
|
|
|
|
}
|
2014-06-16 21:27:47 +00:00
|
|
|
|
|
|
|
function test_cycle(e) { c.horizontalAbsolute(0); c.eraseLine(); c.write("→ "+e.target); }
|
|
|
|
|
|
|
|
function BM(name) {
|
|
|
|
if(!(this instanceof BM)) return new BM(name);
|
|
|
|
console.log("--- " + name + " ---");
|
|
|
|
this.suite = new Benchmark.Suite(name, { onComplete: suite_end });
|
2014-06-17 23:20:41 +00:00
|
|
|
this.suites = [];
|
|
|
|
this.maxlen = 0;
|
2014-06-16 21:27:47 +00:00
|
|
|
}
|
|
|
|
|
2014-06-21 02:15:23 +00:00
|
|
|
BM.prototype.run = function(skip) {
|
|
|
|
if(skip) { this.suites.forEach(function(s) { s[1].fn(); }); return; }
|
2014-06-17 23:20:41 +00:00
|
|
|
var maxlen = this.maxlen, ss = this.suite;
|
|
|
|
this.suites.forEach(function(s) { ss.add(s[0] + new Array(maxlen-s[0].length+1).join(" "), s[1]); });
|
|
|
|
if(this.suites.length > 0) this.suite.run();
|
|
|
|
};
|
2014-06-16 21:27:47 +00:00
|
|
|
|
|
|
|
BM.prototype.add = function(msg, test) {
|
2014-06-17 23:20:41 +00:00
|
|
|
this.suites.push([msg, {
|
2016-06-16 20:49:46 +00:00
|
|
|
onCycle: test_cycle,
|
2014-06-16 21:27:47 +00:00
|
|
|
onComplete: test_end,
|
2016-06-16 20:49:46 +00:00
|
|
|
defer: false,
|
2014-06-16 21:27:47 +00:00
|
|
|
fn: test
|
2014-06-17 23:20:41 +00:00
|
|
|
}]);
|
|
|
|
this.maxlen = Math.max(this.maxlen, msg.length);
|
2014-06-16 21:27:47 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
module.exports = BM;
|