jest-bench
Version:
Run benchmark with Jest
116 lines • 4.64 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
const reporters_1 = require("@jest/reporters");
const chalk_1 = __importDefault(require("chalk"));
const ndjson_1 = __importDefault(require("ndjson"));
const formatPeriod = (num) => {
if (num < 1e-9) {
return `${(num * 1e9).toFixed(3)} ns`;
}
else if (num < 1e-6) {
return `${(num * 1e6).toFixed(3)} μs`;
}
else if (num < 1e-3) {
return `${(num * 1e3).toFixed(3)} ms`;
}
else if (num < 1) {
return `${(num * 1e3).toFixed(2)} ms`;
}
return `${num.toFixed(2)} s`;
};
class BenchmarkReporter extends reporters_1.BaseReporter {
constructor(globalConfig, options = {}) {
super();
this._globalConfig = globalConfig;
this._rootDir = globalConfig.rootDir;
this._options = options;
}
onRunStart(results, options) {
super.onRunStart(results, options);
const name = this.resultFile;
if (fs.existsSync(name)) {
fs.writeFileSync(name, "");
}
}
get resultFile() {
return path.join(this._rootDir, "benchmarks", "result.txt");
}
onRunComplete() {
this.log(`${chalk_1.default.bold("Benchmarks:")}`);
return new Promise((resolve, reject) => {
fs.createReadStream(this.resultFile)
.pipe(ndjson_1.default.parse())
.on("data", (obj) => {
for (let suiteName in obj) {
const suite = obj[suiteName];
this.log(` ${suiteName}`);
const lines = [];
for (let [name, bench] of suite) {
const { stats, times } = bench;
const { rme, sample } = stats;
const size = sample.length;
const { period } = times;
lines.push([
name,
this._options.withOpsPerSecond
? chalk_1.default.blueBright(`${period > 0
? Math.round(1 / period).toLocaleString()
: 0} ops/sec`)
: '',
`${chalk_1.default.green(formatPeriod(period))} \xb1`,
chalk_1.default.cyan(`${rme.toFixed(2)} %`),
`(${size} run${size == 1 ? " " : "s"} sampled)`,
]);
}
const maxWidths = lines.reduce((prev, cur) => cur.map((v, i) => {
if (!prev[i] || prev[i] < v.length)
return v.length;
return prev[i];
}), []);
for (let line of lines) {
this.log(" " + line.map((v, i) => {
const w = maxWidths[i];
return i === 0 ? v.padEnd(w) : v.padStart(w);
}).join(" "));
}
}
})
.on("error", (error) => {
reject(error);
})
.on("end", () => {
resolve();
});
});
}
}
exports.default = BenchmarkReporter;
//# sourceMappingURL=reporter.js.map
;