2018-10-27 01:10:46 +02:00

87 lines
2.0 KiB
JavaScript

var fs = require('fs');
var path = require('path');
var bench = require('bench');
var async = require('async');
var rmdir = require('rmdir');
var ok = require('okay');
var cloned = require('cloned');
cloned.workingDir = __dirname + '/versions';
exports.compare = {
'math': function() {
var two = 1 + 1;
},
'another': function() {
var yay = 2 + 2;
}
};
var clone = function(rev, cb) {
var outputDir = path.join(cloned.workingDir, rev);
console.log(outputDir)
if(fs.existsSync(outputDir)) {
return cb(null, {
rev: rev,
dir: outputDir
});
}
console.log('cloning version ' + rev);
cloned(rev, ok(cb, function(dir) {
console.log('cloned version ' + rev + ' to ' + dir);
cb(null, {
rev: rev,
dir: dir
});
}));
};
var versions = [
'ef599d3'
];
var scripts = fs.readdirSync(__dirname).filter(function(x) {
return x.indexOf('benchmark') > 0;
});
if(process.argv[2]) {
scripts = [process.argv[2]]
}
var run = function() {
async.map(versions, clone, function(err, results) {
if(err) throw err;
exports.compare = { };
var suites = [];
scripts.forEach(function(script) {
for(var i = 0; i < results.length; i++) {
var result = results[i];
var benchPath = path.join(result.dir, 'benchmark', script);
var suite = {};
suites.push(suite);
if(fs.existsSync(benchPath)) {
var bench = require(benchPath);
suite[script + '@' + result.rev] = bench;
} else {
console.log('%s missing at revision %s', benchPath, result.rev);
}
}
suite[script + '@HEAD'] = require(__dirname + '/' + script);
});
var compare = function(suite, cb) {
console.log('running...')
bench.compare(suite, null, null, null, function(err, data) {
if(err) return cb(err);
bench.show(data);
cb(null);
});
}
async.eachSeries(suites, compare, function(err, res) {
console.log('all suites done')
})
});
};
run();