123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419 |
- "use strict";
- var w = Object.defineProperty;
- var P = Object.getOwnPropertyDescriptor;
- var q = Object.getOwnPropertyNames;
- var V = Object.prototype.hasOwnProperty;
- var C = (s, r, t) => r in s ? w(s, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[r] = t;
- var $ = (s, r) => {
- for (var t in r)
- w(s, t, { get: r[t], enumerable: !0 });
- }, D = (s, r, t, e) => {
- if (r && typeof r == "object" || typeof r == "function")
- for (let n of q(r))
- !V.call(s, n) && n !== t && w(s, n, { get: () => r[n], enumerable: !(e = P(r, n)) || e.enumerable });
- return s;
- };
- var G = (s) => D(w({}, "__esModule", { value: !0 }), s);
- var i = (s, r, t) => (C(s, typeof r != "symbol" ? r + "" : r, t), t);
- // src/index.ts
- var Z = {};
- $(Z, {
- Bench: () => m,
- Task: () => p,
- default: () => Y,
- hrtimeNow: () => R,
- now: () => E
- });
- module.exports = G(Z);
- // src/event.ts
- function a(s, r = null) {
- let t = new Event(s);
- return Object.defineProperty(t, "task", {
- value: r,
- enumerable: !0,
- writable: !1,
- configurable: !1
- }), t;
- }
- // src/constants.ts
- var J = {
- 1: 12.71,
- 2: 4.303,
- 3: 3.182,
- 4: 2.776,
- 5: 2.571,
- 6: 2.447,
- 7: 2.365,
- 8: 2.306,
- 9: 2.262,
- 10: 2.228,
- 11: 2.201,
- 12: 2.179,
- 13: 2.16,
- 14: 2.145,
- 15: 2.131,
- 16: 2.12,
- 17: 2.11,
- 18: 2.101,
- 19: 2.093,
- 20: 2.086,
- 21: 2.08,
- 22: 2.074,
- 23: 2.069,
- 24: 2.064,
- 25: 2.06,
- 26: 2.056,
- 27: 2.052,
- 28: 2.048,
- 29: 2.045,
- 30: 2.042,
- 31: 2.0399,
- 32: 2.0378,
- 33: 2.0357,
- 34: 2.0336,
- 35: 2.0315,
- 36: 2.0294,
- 37: 2.0273,
- 38: 2.0252,
- 39: 2.0231,
- 40: 2.021,
- 41: 2.0198,
- 42: 2.0186,
- 43: 2.0174,
- 44: 2.0162,
- 45: 2.015,
- 46: 2.0138,
- 47: 2.0126,
- 48: 2.0114,
- 49: 2.0102,
- 50: 2.009,
- 51: 2.0081,
- 52: 2.0072,
- 53: 2.0063,
- 54: 2.0054,
- 55: 2.0045,
- 56: 2.0036,
- 57: 2.0027,
- 58: 2.0018,
- 59: 2.0009,
- 60: 2,
- 61: 1.9995,
- 62: 1.999,
- 63: 1.9985,
- 64: 1.998,
- 65: 1.9975,
- 66: 1.997,
- 67: 1.9965,
- 68: 1.996,
- 69: 1.9955,
- 70: 1.995,
- 71: 1.9945,
- 72: 1.994,
- 73: 1.9935,
- 74: 1.993,
- 75: 1.9925,
- 76: 1.992,
- 77: 1.9915,
- 78: 1.991,
- 79: 1.9905,
- 80: 1.99,
- 81: 1.9897,
- 82: 1.9894,
- 83: 1.9891,
- 84: 1.9888,
- 85: 1.9885,
- 86: 1.9882,
- 87: 1.9879,
- 88: 1.9876,
- 89: 1.9873,
- 90: 1.987,
- 91: 1.9867,
- 92: 1.9864,
- 93: 1.9861,
- 94: 1.9858,
- 95: 1.9855,
- 96: 1.9852,
- 97: 1.9849,
- 98: 1.9846,
- 99: 1.9843,
- 100: 1.984,
- 101: 1.9838,
- 102: 1.9836,
- 103: 1.9834,
- 104: 1.9832,
- 105: 1.983,
- 106: 1.9828,
- 107: 1.9826,
- 108: 1.9824,
- 109: 1.9822,
- 110: 1.982,
- 111: 1.9818,
- 112: 1.9816,
- 113: 1.9814,
- 114: 1.9812,
- 115: 1.9819,
- 116: 1.9808,
- 117: 1.9806,
- 118: 1.9804,
- 119: 1.9802,
- 120: 1.98,
- infinity: 1.96
- }, g = J;
- // src/utils.ts
- var Q = (s) => s / 1e6, R = () => Q(Number(process.hrtime.bigint())), E = () => performance.now();
- function U(s) {
- return s !== null && typeof s == "object" && typeof s.then == "function";
- }
- var O = (s) => s.reduce((r, t) => r + t, 0) / s.length || 0, F = (s, r) => s.reduce((e, n) => e + (n - r) ** 2, 0) / (s.length - 1) || 0, W = (async () => {
- }).constructor, X = (s) => s.constructor === W, k = async (s) => {
- if (X(s.fn))
- return !0;
- try {
- if (s.opts.beforeEach != null)
- try {
- await s.opts.beforeEach.call(s);
- } catch (e) {
- }
- let r = s.fn(), t = U(r);
- if (t)
- try {
- await r;
- } catch (e) {
- }
- if (s.opts.afterEach != null)
- try {
- await s.opts.afterEach.call(s);
- } catch (e) {
- }
- return t;
- } catch (r) {
- return !1;
- }
- };
- // src/task.ts
- var p = class extends EventTarget {
- constructor(t, e, n, h = {}) {
- super();
- i(this, "bench");
- i(this, "name");
- i(this, "fn");
- i(this, "runs", 0);
- i(this, "result");
- i(this, "opts");
- this.bench = t, this.name = e, this.fn = n, this.opts = h;
- }
- async run() {
- var h, c, f, d;
- this.dispatchEvent(a("start", this));
- let t = 0, e = [];
- if (await this.bench.setup(this, "run"), this.opts.beforeAll != null)
- try {
- await this.opts.beforeAll.call(this);
- } catch (o) {
- this.setResult({ error: o });
- }
- let n = await k(this);
- try {
- for (; (t < this.bench.time || this.runs < this.bench.iterations) && !((h = this.bench.signal) != null && h.aborted); ) {
- this.opts.beforeEach != null && await this.opts.beforeEach.call(this);
- let o = 0;
- if (n) {
- let l = this.bench.now();
- await this.fn.call(this), o = this.bench.now() - l;
- } else {
- let l = this.bench.now();
- this.fn.call(this), o = this.bench.now() - l;
- }
- e.push(o), this.runs += 1, t += o, this.opts.afterEach != null && await this.opts.afterEach.call(this);
- }
- } catch (o) {
- if (this.setResult({ error: o }), this.bench.throws)
- throw o;
- }
- if (this.opts.afterAll != null)
- try {
- await this.opts.afterAll.call(this);
- } catch (o) {
- this.setResult({ error: o });
- }
- if (await this.bench.teardown(this, "run"), !((c = this.result) != null && c.error)) {
- e.sort((j, z) => j - z);
- let o = t / this.runs, l = 1e3 / o, u = e.length, b = u - 1, B = e[0], K = e[b], T = O(e), y = F(e, T), A = Math.sqrt(y), x = A / Math.sqrt(u), L = g[String(Math.round(b) || 1)] || g.infinity, M = x * L, N = M / T * 100, _ = e[Math.ceil(u * 0.75) - 1], S = e[Math.ceil(u * 0.99) - 1], I = e[Math.ceil(u * 0.995) - 1], H = e[Math.ceil(u * 0.999) - 1];
- if ((f = this.bench.signal) != null && f.aborted)
- return this;
- this.setResult({
- totalTime: t,
- min: B,
- max: K,
- hz: l,
- period: o,
- samples: e,
- mean: T,
- variance: y,
- sd: A,
- sem: x,
- df: b,
- critical: L,
- moe: M,
- rme: N,
- p75: _,
- p99: S,
- p995: I,
- p999: H
- });
- }
- return (d = this.result) != null && d.error && (this.dispatchEvent(a("error", this)), this.bench.dispatchEvent(a("error", this))), this.dispatchEvent(a("cycle", this)), this.bench.dispatchEvent(a("cycle", this)), this.dispatchEvent(a("complete", this)), this;
- }
- async warmup() {
- var h;
- this.dispatchEvent(a("warmup", this));
- let t = this.bench.now(), e = 0;
- if (await this.bench.setup(this, "warmup"), this.opts.beforeAll != null)
- try {
- await this.opts.beforeAll.call(this);
- } catch (c) {
- this.setResult({ error: c });
- }
- let n = await k(this);
- for (; (e < this.bench.warmupTime || this.runs < this.bench.warmupIterations) && !((h = this.bench.signal) != null && h.aborted); ) {
- if (this.opts.beforeEach != null)
- try {
- await this.opts.beforeEach.call(this);
- } catch (c) {
- this.setResult({ error: c });
- }
- try {
- n ? await this.fn.call(this) : this.fn.call(this);
- } catch (c) {
- if (this.bench.throws)
- throw c;
- }
- if (this.runs += 1, e = this.bench.now() - t, this.opts.afterEach != null)
- try {
- await this.opts.afterEach.call(this);
- } catch (c) {
- this.setResult({ error: c });
- }
- }
- if (this.opts.afterAll != null)
- try {
- await this.opts.afterAll.call(this);
- } catch (c) {
- this.setResult({ error: c });
- }
- this.bench.teardown(this, "warmup"), this.runs = 0;
- }
- addEventListener(t, e, n) {
- super.addEventListener(t, e, n);
- }
- removeEventListener(t, e, n) {
- super.removeEventListener(t, e, n);
- }
- setResult(t) {
- this.result = { ...this.result, ...t }, Object.freeze(this.reset);
- }
- reset() {
- this.dispatchEvent(a("reset", this)), this.runs = 0, this.result = void 0;
- }
- };
- // src/bench.ts
- var m = class extends EventTarget {
- constructor(t = {}) {
- var e, n, h, c, f, d, o, l;
- super();
- i(this, "_tasks", /* @__PURE__ */ new Map());
- i(this, "_todos", /* @__PURE__ */ new Map());
- i(this, "signal");
- i(this, "throws");
- i(this, "warmupTime", 100);
- i(this, "warmupIterations", 5);
- i(this, "time", 500);
- i(this, "iterations", 10);
- i(this, "now", E);
- i(this, "setup");
- i(this, "teardown");
- this.now = (e = t.now) != null ? e : this.now, this.warmupTime = (n = t.warmupTime) != null ? n : this.warmupTime, this.warmupIterations = (h = t.warmupIterations) != null ? h : this.warmupIterations, this.time = (c = t.time) != null ? c : this.time, this.iterations = (f = t.iterations) != null ? f : this.iterations, this.signal = t.signal, this.throws = (d = t.throws) != null ? d : !1, this.setup = (o = t.setup) != null ? o : () => {
- }, this.teardown = (l = t.teardown) != null ? l : () => {
- }, this.signal && this.signal.addEventListener(
- "abort",
- () => {
- this.dispatchEvent(a("abort"));
- },
- { once: !0 }
- );
- }
- async run() {
- var e;
- this.dispatchEvent(a("start"));
- let t = [];
- for (let n of [...this._tasks.values()])
- (e = this.signal) != null && e.aborted ? t.push(n) : t.push(await n.run());
- return this.dispatchEvent(a("complete")), t;
- }
- async warmup() {
- this.dispatchEvent(a("warmup"));
- for (let [, t] of this._tasks)
- await t.warmup();
- }
- reset() {
- this.dispatchEvent(a("reset")), this._tasks.forEach((t) => {
- t.reset();
- });
- }
- add(t, e, n = {}) {
- let h = new p(this, t, e, n);
- return this._tasks.set(t, h), this.dispatchEvent(a("add", h)), this;
- }
- todo(t, e = () => {
- }, n = {}) {
- let h = new p(this, t, e, n);
- return this._todos.set(t, h), this.dispatchEvent(a("todo", h)), this;
- }
- remove(t) {
- let e = this.getTask(t);
- return e && (this.dispatchEvent(a("remove", e)), this._tasks.delete(t)), this;
- }
- addEventListener(t, e, n) {
- super.addEventListener(t, e, n);
- }
- removeEventListener(t, e, n) {
- super.removeEventListener(t, e, n);
- }
- table() {
- return this.tasks.map(({ name: t, result: e }) => e ? {
- "Task Name": t,
- "ops/sec": e.error ? "NaN" : parseInt(e.hz.toString(), 10).toLocaleString(),
- "Average Time (ns)": e.error ? "NaN" : e.mean * 1e3 * 1e3,
- Margin: e.error ? "NaN" : `\xB1${e.rme.toFixed(2)}%`,
- Samples: e.error ? "NaN" : e.samples.length
- } : null);
- }
- get results() {
- return [...this._tasks.values()].map((t) => t.result);
- }
- get tasks() {
- return [...this._tasks.values()];
- }
- get todos() {
- return [...this._todos.values()];
- }
- getTask(t) {
- return this._tasks.get(t);
- }
- };
- // src/index.ts
- var Y = m;
- // Annotate the CommonJS export names for ESM import in node:
- 0 && (module.exports = {
- Bench,
- Task,
- hrtimeNow,
- now
- });
|