var print = require("sys").print; var Benchmark = require("benchmark"); var BenchWarmer = function(names) { this.benchmarks = []; this.currentBenches = []; this.names = []; this.errors = {}; }; BenchWarmer.prototype = { winners: function(benches) { var result = Benchmark.filter(benches, function(bench) { return bench.cycles; }); if (result.length > 1) { result.sort(function(a, b) { return b.compare(a); }); first = result[0]; last = result[result.length - 1]; var winners = []; Benchmark.each(result, function(bench) { if (bench.compare(first) === 0) { winners.push(bench); } }); return winners; } else { return result; } }, suite: function(suite, fn) { this.suiteName = suite; this.first = true; var self = this; fn(function(name, benchFn) { self.push(name, benchFn); }); }, push: function(name, fn) { if(this.names.indexOf(name) == -1) { this.names.push(name); } var first = this.first, suiteName = this.suiteName, self = this; this.first = false; var bench = new Benchmark(function() { fn(); }, { name: this.suiteName + ": " + name, onComplete: function() { if(first) { self.startLine(suiteName); } self.writeBench(bench); self.currentBenches.push(bench); }, onError: function(bench) { self.errors[bench.name] = bench; } }); this.benchmarks.push(bench); }, bench: function() { var benchSize = 0, names = this.names, self = this, i, l; for(i=0, l=names.length; i