blob: 5085daa118f55c737a566f9f6a81762b0ae728d2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
global._ = require('lodash');
const Benchmark = (global.Benchmark = require('benchmark'));
export default function bench(benches, callback) {
return new Promise(resolve => {
const suite = new Benchmark.Suite();
let i = 0;
Object.keys(benches).forEach(name => {
let run = benches[name];
suite.add(name, () => {
run(++i);
});
});
suite.on('complete', () => {
const result = {
fastest: suite.filter('fastest')[0],
results: [],
text: ''
};
const useKilo = suite.filter(b => b.hz < 10000).length === 0;
suite.forEach((bench, index) => {
let r = {
name: bench.name,
slowdown:
bench.name === result.fastest.name
? 0
: (((result.fastest.hz - bench.hz) / result.fastest.hz) * 100) |
0,
hz: bench.hz.toFixed(bench.hz < 100 ? 2 : 0),
rme: bench.stats.rme.toFixed(2),
size: bench.stats.sample.length,
error: bench.error ? String(bench.error) : undefined
};
result.text += `\n ${r.name}: ${
useKilo ? `${(r.hz / 1000) | 0} kHz` : `${r.hz} Hz`
}${r.slowdown ? ` (-${r.slowdown}%)` : ''}`;
result.results[index] = result.results[r.name] = r;
});
resolve(result);
if (callback) callback(result);
});
suite.run({ async: true });
});
}
|