forked from babel/babel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.mjs
64 lines (59 loc) · 1.71 KB
/
util.mjs
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import * as currentTypes from "@babel/types";
import * as baselineTypes from "@babel-baseline/types";
import * as currentParser from "@babel/parser";
import * as baselineParser from "@babel-baseline/parser";
import * as currentGenerator from "@babel/generator";
import * as baselineGenerator from "@babel-baseline/generator";
import * as currentCore from "@babel/core";
import * as baselineCore from "@babel-baseline/core";
import * as currentTraverse from "@babel/traverse";
import * as baselineTraverse from "@babel-baseline/traverse";
import presetEnv from "@babel/preset-env";
import presetTypescript from "@babel/preset-typescript";
import benchmark from "benchmark";
export function report(event) {
const bench = event.target;
const timeMs = bench.stats.mean * 1000;
const time =
timeMs < 10
? `${Math.round(timeMs * 1000) / 1000}ms`
: `${Math.round(timeMs)}ms`;
const msg = `${bench.name}: ${formatNumber(bench.hz)} ops/sec ±${
Math.round(bench.stats.rme * 100) / 100
}% (${time})`;
console.log(msg);
}
function formatNumber(x) {
if (x < 100) return `${Math.round(x * 100) / 100}`;
return `${Math.round(x)}`.replace(/\d(?=(?:\d{3})+$)/g, "$&_");
}
class Benchmark {
constructor() {
this.suite = new benchmark.Suite();
}
add(name, fn, options) {
this.suite.add(name, fn, options);
}
run() {
this.suite.on("cycle", report);
this.suite.on("error", function (event) {
console.error(event.target.error);
});
this.suite.run();
}
}
export {
currentTypes,
baselineTypes,
currentParser,
baselineParser,
currentGenerator,
baselineGenerator,
currentCore,
baselineCore,
currentTraverse,
baselineTraverse,
presetEnv,
presetTypescript,
Benchmark,
};