isect/perf/perf-chart.js
2018-10-05 21:11:57 -07:00

67 lines
1.4 KiB
JavaScript

var g = require('./generators');
var performance = require('perf_hooks').performance;
var isect = require('../');
var brute = isect.brute;
var sweep = isect.sweep;
var metrics = [];
var lines;
for (var i = 3; i < 6; ++i) {
lines = g.complete(i, i * 10);
var res = measure(bruteForcer, 10);
res.lines = lines.length;
metrics.push(res);
}
function sweeper() {
return sweep(lines).run();
}
function bruteForcer() {
return brute(lines).run();
}
console.log(toCsv(metrics));
function toCsv(arr) {
var headers = Object.keys(arr[0]);
console.log(headers.join(','));
arr.forEach(row => {
console.log(headers.map(h => row[h]).join(','))
})
}
function measure(tester, testCount) {
var results = [];
var found = 0;
for (var i = 0; i < testCount; ++i) {
var start = performance.now();
var res = tester();
var elapsed = performance.now() - start;
results.push(elapsed);
if (i > 0) {
if (found !== res.length) throw new Error('It does not agree!');
} else found = res.length;
}
var stats = computeStats(results);
stats.found = found;
return stats;
}
function computeStats(arr) {
arr.sort((a, b) => a - b);
var min = arr[0];
var max = arr[arr.length - 1];
var total = 0;
for (var i = 0; i < arr.length; ++i) {
total += arr[i];
}
var avg = total/arr.length;
var median = arr[Math.round(arr.length/2)];
return {min, max, avg, median};
}