Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

tinybench

Package Overview
Dependencies
Maintainers
3
Versions
59
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tinybench - npm Package Compare versions

Comparing version
5.0.1
to
5.1.0
+15
-11
dist/index.d.ts

@@ -36,2 +36,6 @@ //#region src/task.d.ts

private readonly fnOpts;
/**
* The task-level abort signal
*/
private readonly signal;
constructor(bench: Bench, name: string, fn: Fn, fnOpts?: FnOptions);

@@ -69,2 +73,7 @@ addEventListener<K extends TaskEvents>(type: K, listener: TaskEventsMap[K], options?: AddEventListenerOptionsArgument): void;

private benchmarkSync;
/**
* Check if either our signal or the bench-level signal is aborted
* @returns `true` if either signal is aborted
*/
private isAborted;
private measureOnce;

@@ -110,8 +119,2 @@ private measureOnceSync;

/**
* Converts milliseconds to nanoseconds.
* @param ms - the milliseconds to convert
* @returns the nanoseconds
*/
/**
* Returns the current high resolution timestamp in milliseconds using `process.hrtime.bigint()`.

@@ -122,7 +125,2 @@ * @returns the current high resolution timestamp in milliseconds

declare const now: () => number;
/**
* Checks if a value is a promise-like object.
* @param maybePromiseLike - the value to check
* @returns true if the value is a promise-like object
*/
//#endregion

@@ -246,2 +244,8 @@ //#region src/types.d.ts

beforeEach?: FnHook;
/**
* An AbortSignal for aborting this specific task
*
* If not provided, falls back to {@link BenchOptions.signal}
*/
signal?: AbortSignal;
}

@@ -248,0 +252,0 @@ /**

@@ -1,1490 +0,1 @@

var e = class {
value;
next;
constructor(e) {
this.value = e;
}
}, t = class {
#head;
#tail;
#size;
constructor() {
this.clear();
}
enqueue(t) {
let n = new e(t);
this.#head ? (this.#tail.next = n, this.#tail = n) : (this.#head = n, this.#tail = n), this.#size++;
}
dequeue() {
let e = this.#head;
if (e) return this.#head = this.#head.next, this.#size--, e.value;
}
peek() {
if (this.#head) return this.#head.value;
}
clear() {
this.#head = void 0, this.#tail = void 0, this.#size = 0;
}
get size() {
return this.#size;
}
*[Symbol.iterator]() {
let e = this.#head;
for (; e;) yield e.value, e = e.next;
}
*drain() {
for (; this.#head;) yield this.dequeue();
}
};
function n(e) {
r(e);
let n = new t(), i = 0, a = () => {
i < e && n.size > 0 && (i++, n.dequeue()());
}, o = () => {
i--, a();
}, s = async (e, t, n) => {
let r = (async () => e(...n))();
t(r);
try {
await r;
} catch {}
o();
}, c = (t, r, o) => {
new Promise((e) => {
n.enqueue(e);
}).then(s.bind(void 0, t, r, o)), i < e && a();
}, l = (e, ...t) => new Promise((n) => {
c(e, n, t);
});
return Object.defineProperties(l, {
activeCount: { get: () => i },
pendingCount: { get: () => n.size },
clearQueue: { value() {
n.clear();
} },
concurrency: {
get: () => e,
set(t) {
r(t), e = t, queueMicrotask(() => {
for (; i < e && n.size > 0;) a();
});
}
},
map: { async value(e, t) {
let n = e.map((e, n) => this(t, e, n));
return Promise.all(n);
} }
}), l;
}
function r(e) {
if (!((Number.isInteger(e) || e === Infinity) && e > 0)) throw TypeError("Expected `concurrency` to be a number from 1 and up");
}
const i = Object.freeze({
1: 12.706204736432102,
2: 4.3026527299112765,
3: 3.182446305284264,
4: 2.7764451051977996,
5: 2.57058183661474,
6: 2.446911848791681,
7: 2.3646242510102997,
8: 2.306004135033371,
9: 2.262157162740992,
10: 2.2281388519649385,
11: 2.200985160082949,
12: 2.178812829663418,
13: 2.160368656461013,
14: 2.1447866879169277,
15: 2.131449545559323,
16: 2.1199052992210112,
17: 2.109815577833181,
18: 2.10092204024096,
19: 2.0930240544082634,
20: 2.085963447265837,
21: 2.0796138447276626,
22: 2.073873067904015,
23: 2.068657610419041,
24: 2.063898561628021,
25: 2.0595385527532946,
26: 2.0555294386428713,
27: 2.0518305164802837,
28: 2.048407141795244,
29: 2.0452296421327034,
30: 2.042272456301238,
31: 2.0395134463964077,
32: 2.0369333434601016,
33: 2.0345152974493383,
34: 2.0322445093177186,
35: 2.030107928250343,
36: 2.0280940009804507,
37: 2.0261924630291097,
38: 2.0243941645751367,
39: 2.0226909117347285,
40: 2.021075382995338,
41: 2.019540963982894,
42: 2.0180816970958815,
43: 2.0166921941428138,
44: 2.0153675699129416,
45: 2.0141033848332928,
46: 2.012895595294589,
47: 2.011740510475755,
48: 2.010634754696446,
49: 2.0095752344892093,
50: 2.0085591097152062,
51: 2.0075837681558824,
52: 2.0066468031022118,
53: 2.00574599353695,
54: 2.0048792865665233,
55: 2.0040447818101814,
56: 2.003240717496698,
57: 2.002465458054599,
58: 2.0017174830120927,
59: 2.0009953770482105,
60: 2.000297821058262,
61: 1.9996235841149783,
62: 1.9989715162223116,
63: 1.998340541772196,
64: 1.9977296536259739,
65: 1.9971379077520126,
66: 1.9965644183594748,
67: 1.996008353475506,
68: 1.9954689309194023,
69: 1.994945414632814,
70: 1.9944371113297732,
71: 1.9939433674345044,
72: 1.9934635662785831,
73: 1.9929971255321668,
74: 1.9925434948468204,
75: 1.9921021536898658,
76: 1.9916726093523491,
77: 1.9912543951146042,
78: 1.9908470685550523,
79: 1.9904502099893606,
80: 1.9900634210283845,
81: 1.9896863232444832,
82: 1.989318556936819,
83: 1.9889597799871794,
84: 1.9886096667986737,
85: 1.988267907310378,
86: 1.9879342060816723,
87: 1.9876082814405773,
88: 1.987289864690939,
89: 1.9869786993737681,
90: 1.9866745405784685,
91: 1.9863771543000652,
92: 1.9860863168388938,
93: 1.985801814239503,
94: 1.9855234417658303,
95: 1.9852510034099267,
96: 1.9849843114317696,
97: 1.9847231859278835,
98: 1.9844674544266925,
99: 1.9842169515086832,
100: 1.983971518449634,
101: 1.9837310028852815,
102: 1.9834952584959407,
103: 1.9832641447097104,
104: 1.9830375264229902,
105: 1.9828152737371547,
106: 1.9825972617102912,
107: 1.9823833701230178,
108: 1.9821734832574516,
109: 1.9819674896884745,
110: 1.9817652820865104,
111: 1.981566757031071,
112: 1.9813718148344008,
113: 1.9811803593745805,
114: 1.9809922979375068,
115: 1.9808075410672004,
116: 1.980626002423938,
117: 1.9804475986497296,
118: 1.9802722492407063,
119: 1.9800998764260065,
120: 1.979930405052777,
121: 1.9797637624769306,
122: 1.9795998784593314,
123: 1.97943868506709,
124: 1.979280116579683,
125: 1.9791241093996175,
126: 1.9789706019673938,
127: 1.978819534680521,
128: 1.9786708498163625,
129: 1.9785244914586055,
130: 1.9783804054271532,
131: 1.9782385392112587,
132: 1.9780988419057237,
133: 1.977961264150002,
134: 1.9778257580700531,
135: 1.9776922772228045,
136: 1.9775607765430836,
137: 1.977431212292894,
138: 1.9773035420129166,
139: 1.9771777244761224,
140: 1.9770537196433886,
141: 1.9769314886210223,
142: 1.97681099362009,
143: 1.9766921979174685,
144: 1.9765750658185368,
145: 1.9764595626214163,
146: 1.9763456545827007,
147: 1.9762333088845883,
148: 1.9761224936033637,
149: 1.9760131776791554,
150: 1.9759053308869141,
151: 1.9757989238085507,
152: 1.975693927806187,
153: 1.9755903149964589,
154: 1.9754880582258323,
155: 1.9753871310468787,
156: 1.9752875076954728,
157: 1.9751891630688665,
158: 1.9750920727046015,
159: 1.9749962127602256,
160: 1.9749015599937723,
161: 1.9748080917449764,
162: 1.9747157859171882,
163: 1.9746246209599583,
164: 1.9745345758522659,
165: 1.9744456300863593,
166: 1.9743577636521858,
167: 1.9742709570223849,
168: 1.974185191137821,
169: 1.9741004473936339,
170: 1.9740167076257829,
171: 1.9739339540980692,
172: 1.9738521694896138,
173: 1.9737713368827694,
174: 1.9736914397514562,
175: 1.9736124619498976,
176: 1.9735343877017435,
177: 1.9734572015895646,
178: 1.9733808885447033,
179: 1.9733054338374667,
180: 1.973230823067649,
181: 1.9731570421553692,
182: 1.9730840773322162,
183: 1.9730119151326795,
184: 1.9729405423858692,
185: 1.9728699462074992,
186: 1.9728001139921352,
187: 1.9727310334056907,
188: 1.9726626923781656,
189: 1.9725950790966158,
190: 1.9725281819983451,
191: 1.972461989764315,
192: 1.9723964913127596,
193: 1.9723316757930012,
194: 1.9722675325794565,
195: 1.972204051265833,
196: 1.9721412216594971,
197: 1.9720790337760221,
198: 1.972017477833896,
199: 1.9719565442493954,
200: 1.9718962236316093,
201: 1.9718365067776158,
202: 1.971777384667801,
203: 1.971718848461318,
204: 1.9716608894916787,
205: 1.971603499262479,
206: 1.9715466694432433,
207: 1.9714903918653972,
208: 1.9714346585183509,
209: 1.9713794615456992,
210: 1.9713247932415296,
211: 1.9712706460468354,
212: 1.9712170125460335,
213: 1.9711638854635767,
214: 1.971111257660664,
215: 1.9710591221320446,
216: 1.9710074720029072,
217: 1.97095630052586,
218: 1.9709056010779908,
219: 1.9708553671580111,
220: 1.9708055923834753,
221: 1.970756270488079,
222: 1.9707073953190282,
223: 1.9706589608344816,
224: 1.9706109611010594,
225: 1.9705633902914228,
226: 1.9705162426819125,
227: 1.9704695126502556,
228: 1.9704231946733297,
229: 1.9703772833249869,
230: 1.9703317732739336,
231: 1.9702866592816697,
232: 1.9702419362004757,
233: 1.9701975989714555,
234: 1.9701536426226303,
235: 1.9701100622670775,
236: 1.9700668531011214,
237: 1.9700240104025675,
238: 1.9699815295289818,
239: 1.969939405916016,
240: 1.9698976350757686,
241: 1.9698562125951948,
242: 1.9698151341345516,
243: 1.9697743954258797,
244: 1.9697339922715287,
245: 1.9696939205427133,
246: 1.9696541761781068,
247: 1.9696147551824699,
248: 1.9695756536253115,
249: 1.9695368676395828,
250: 1.9694983934204007,
251: 1.9694602272238055,
252: 1.9694223653655467,
253: 1.969384804219895,
254: 1.9693475402184863,
255: 1.9693105698491933,
256: 1.9692738896550193,
257: 1.9692374962330224,
258: 1.9692013862332616,
259: 1.9691655563577715,
260: 1.9691300033595551,
261: 1.9690947240416052,
262: 1.9690597152559448,
263: 1.9690249739026924,
264: 1.9689904969291443,
265: 1.968956281328883,
266: 1.9689223241409022,
267: 1.9688886224487527,
268: 1.9688551733797075,
269: 1.968821974103945,
270: 1.9687890218337525,
271: 1.968756313822743,
272: 1.968723847365097,
273: 1.9686916197948103,
274: 1.9686596284849691,
275: 1.9686278708470335,
276: 1.9685963443301415,
277: 1.968565046420423,
278: 1.9685339746403347,
279: 1.9685031265480044,
280: 1.9684724997365923,
281: 1.968442091833664,
282: 1.968411900500579,
283: 1.9683819234318907,
284: 1.9683521583547587,
285: 1.9683226030283762,
286: 1.9682932552434063,
287: 1.968264112821431,
288: 1.9682351736144144,
289: 1.9682064355041722,
290: 1.968177896401857,
291: 1.968149554247451,
292: 1.9681214070092705,
293: 1.9680934526834821,
294: 1.9680656892936232,
295: 1.968038114890141,
296: 1.9680107275499321,
297: 1.9679835253758984,
298: 1.967956506496507,
299: 1.9679296690653623,
300: 1.9679030112607847,
301: 1.9678765312853979,
302: 1.967850227365727,
303: 1.9678240977517998,
304: 1.967798140716761,
305: 1.9677723545564905,
306: 1.967746737589231,
307: 1.9677212881552217,
308: 1.967696004616341,
309: 1.967670885355754,
310: 1.9676459287775685,
311: 1.9676211333064957,
312: 1.9675964973875213,
313: 1.967572019485578,
314: 1.967547698085227,
315: 1.9675235316903468,
316: 1.9674995188238256,
317: 1.9674756580272583,
318: 1.9674519478606556,
319: 1.96742838690215,
320: 1.9674049737477135,
321: 1.9673817070108799,
322: 1.9673585853224684,
323: 1.9673356073303163,
324: 1.9673127716990173,
325: 1.9672900771096589,
326: 1.9672675222595717,
327: 1.9672451058620788,
328: 1.9672228266462515,
329: 1.9672006833566689,
330: 1.9671786747531816,
331: 1.9671567996106818,
332: 1.967135056718874,
333: 1.9671134448820529,
334: 1.9670919629188843,
335: 1.9670706096621893,
336: 1.967049383958733,
337: 1.9670282846690177,
338: 1.9670073106670771,
339: 1.9669864608402783,
340: 1.966965734089124,
341: 1.9669451293270586,
342: 1.9669246454802793,
343: 1.9669042814875488,
344: 1.9668840363000124,
345: 1.966863908881019,
346: 1.9668438982059417,
347: 1.966824003262006,
348: 1.9668042230481186,
349: 1.9667845565746986,
350: 1.9667650028635129,
351: 1.9667455609475144,
352: 1.9667262298706825,
353: 1.966707008687866,
354: 1.9666878964646288,
355: 1.9666688922770996,
356: 1.9666499952118222,
357: 1.9666312043656085,
358: 1.9666125188453965,
359: 1.9665939377681074,
360: 1.9665754602605063,
361: 1.9665570854590666,
362: 1.9665388125098342,
363: 1.966520640568296,
364: 1.9665025687992495,
365: 1.966484596376675,
366: 1.9664667224836099,
367: 1.9664489463120245,
368: 1.9664312670626998,
369: 1.9664136839451096,
370: 1.9663961961773,
371: 1.966378802985776,
372: 1.9663615036053859,
373: 1.9663442972792093,
374: 1.9663271832584475,
375: 1.9663101608023135,
376: 1.966293229177927,
377: 1.9662763876602067,
378: 1.96625963553177,
379: 1.9662429720828285,
380: 1.9662263966110878,
381: 1.9662099084216513,
382: 1.9661935068269203,
383: 1.9661771911465,
384: 1.9661609607071053,
385: 1.9661448148424667,
386: 1.9661287528932416,
387: 1.9661127742069229,
388: 1.9660968781377508,
389: 1.966081064046626,
390: 1.966065331301024,
391: 1.966049679274911,
392: 1.9660341073486605,
393: 1.9660186149089722,
394: 1.9660032013487905,
395: 1.9659878660672256,
396: 1.9659726084694753,
397: 1.9659574279667498,
398: 1.965942323976193,
399: 1.9659272959208094,
400: 1.9659123432293915,
401: 1.9658974653364458,
402: 1.9658826616821223,
403: 1.965867931712145,
404: 1.9658532748777406,
405: 1.9658386906355727,
406: 1.9658241784476738,
407: 1.965809737781378,
408: 1.9657953681092573,
409: 1.9657810689090576,
410: 1.9657668396636336,
411: 1.965752679860889,
412: 1.9657385889937122,
413: 1.9657245665599175,
414: 1.9657106120621863,
415: 1.9656967250080057,
416: 1.9656829049096134,
417: 1.9656691512839384,
418: 1.965655463652545,
419: 1.9656418415415793,
420: 1.9656282844817121,
421: 1.9656147920080864,
422: 1.9656013636602634,
423: 1.9655879989821707,
424: 1.9655746975220507,
425: 1.9655614588324102,
426: 1.965548282469968,
427: 1.9655351679956077,
428: 1.9655221149743287,
429: 1.9655091229751978,
430: 1.9654961915712998,
431: 1.9654833203396942,
432: 1.9654705088613673,
433: 1.9654577567211857,
434: 1.965445063507854,
435: 1.965432428813868,
436: 1.9654198522354724,
437: 1.9654073333726187,
438: 1.9653948718289207,
439: 1.9653824672116142,
440: 1.9653701191315152,
441: 1.9653578272029781,
442: 1.9653455910438589,
443: 1.9653334102754718,
444: 1.9653212845225516,
445: 1.9653092134132164,
446: 1.9652971965789277,
447: 1.9652852336544535,
448: 1.9652733242778317,
449: 1.9652614680903338,
450: 1.9652496647364275,
451: 1.9652379138637432,
452: 1.9652262151230366,
453: 1.9652145681681563,
454: 1.9652029726560083,
455: 1.9651914282465226,
456: 1.9651799346026202,
457: 1.9651684913901803,
458: 1.9651570982780076,
459: 1.9651457549378,
460: 1.9651344610441186,
461: 1.9651232162743548,
462: 1.9651120203087005,
463: 1.9651008728301178,
464: 1.9650897735243085,
465: 1.9650787220796855,
466: 1.9650677181873428,
467: 1.965056761541027,
468: 1.965045851837109,
469: 1.965034988774555,
470: 1.965024172054902,
471: 1.9650134013822251,
472: 1.9650026764631154,
473: 1.9649919970066518,
474: 1.9649813627243728,
475: 1.964970773330254,
476: 1.9649602285406784,
477: 1.9649497280744153,
478: 1.9649392716525922,
479: 1.964928858998672,
480: 1.9649184898384262,
481: 1.9649081638999137,
482: 1.9648978809134563,
483: 1.9648876406116125,
484: 1.9648774427291587,
485: 1.9648672870030628,
486: 1.9648571731724636,
487: 1.9648471009786466,
488: 1.9648370701650248,
489: 1.9648270804771135,
490: 1.9648171316625118,
491: 1.964807223470879,
492: 1.9647973556539153,
493: 1.9647875279653397,
494: 1.9647777401608706,
495: 1.9647679919982053,
496: 1.9647582832369994,
497: 1.9647486136388483,
498: 1.9647389829672652,
499: 1.9647293909876653,
500: 1.9647198374673442,
501: 1.9647103221754598,
502: 1.964700844883014,
503: 1.9646914053628335,
504: 1.9646820033895525,
505: 1.964672638739595,
506: 1.9646633111911553,
507: 1.9646540205241838,
508: 1.9646447665203655,
509: 1.964635548963106,
510: 1.9646263676375137,
511: 1.9646172223303833,
512: 1.9646081128301776,
513: 1.9645990389270147,
514: 1.9645900004126484,
515: 1.9645809970804544,
516: 1.9645720287254127,
517: 1.9645630951440949,
518: 1.964554196134645,
519: 1.9645453314967691,
520: 1.9645365010317148,
521: 1.9645277045422602,
522: 1.9645189418326983,
523: 1.964510212708822,
524: 1.964501516977911,
525: 1.964492854448715,
526: 1.9644842249314425,
527: 1.9644756282377454,
528: 1.9644670641807058,
529: 1.964458532574823,
530: 1.9644500332359982,
531: 1.9644415659815229,
532: 1.9644331306300662,
533: 1.9644247270016604,
534: 1.964416354917689,
535: 1.9644080142008735,
536: 1.9643997046752626,
537: 1.9643914261662165,
538: 1.9643831785003991,
539: 1.9643749615057613,
540: 1.9643667750115323,
541: 1.964358618848207,
542: 1.9643504928475335,
543: 1.964342396842502,
544: 1.9643343306673333,
545: 1.9643262941574684,
546: 1.9643182871495555,
547: 1.9643103094814403,
548: 1.964302360992155,
549: 1.9642944415219068,
550: 1.9642865509120675,
551: 1.9642786890051633,
552: 1.964270855644863,
553: 1.9642630506759702,
554: 1.9642552739444101,
555: 1.9642475252972216,
556: 1.9642398045825453,
557: 1.9642321116496164,
558: 1.9642244463487513,
559: 1.9642168085313412,
560: 1.9642091980498402,
561: 1.9642016147577568,
562: 1.964194058509645,
563: 1.9641865291610932,
564: 1.9641790265687171,
565: 1.964171550590149,
566: 1.9641641010840303,
567: 1.9641566779100006,
568: 1.9641492809286911,
569: 1.964141910001714,
570: 1.964134564991655,
571: 1.9641272457620647,
572: 1.9641199521774493,
573: 1.964112684103263,
574: 1.9641054414058998,
575: 1.9640982239526847,
576: 1.964091031611867,
577: 1.9640838642526093,
578: 1.964076721744983,
579: 1.9640696039599586,
580: 1.9640625107693983,
581: 1.9640554420460483,
582: 1.9640483976635308,
583: 1.9640413774963374,
584: 1.964034381419821,
585: 1.9640274093101877,
586: 1.9640204610444916,
587: 1.9640135365006257,
588: 1.9640066355573154,
589: 1.9639997580941106,
590: 1.963992903991381,
591: 1.9639860731303063,
592: 1.9639792653928712,
593: 1.9639724806618581,
594: 1.9639657188208401,
595: 1.9639589797541745,
596: 1.963952263346997,
597: 1.963945569485213,
598: 1.963938898055494,
599: 1.9639322489452695,
600: 1.96392562204272,
601: 1.9639190172367733,
602: 1.963912434417095,
603: 1.963905873474085,
604: 1.9638993342988706,
605: 1.9638928167832999,
606: 1.9638863208199362,
607: 1.9638798463020526,
608: 1.9638733931236256,
609: 1.9638669611793291,
610: 1.9638605503645292,
611: 1.9638541605752786,
612: 1.9638477917083106,
613: 1.963841443661033,
614: 1.9638351163315244,
615: 1.9638288096185263,
616: 1.9638225234214404,
617: 1.9638162576403206,
618: 1.96381001217587,
619: 1.9638037869294331,
620: 1.9637975818029945,
621: 1.9637913966991682,
622: 1.9637852315211985,
623: 1.9637790861729507,
624: 1.963772960558908,
625: 1.9637668545841658,
626: 1.9637607681544267,
627: 1.963754701175997,
628: 1.96374865355578,
629: 1.9637426252012729,
630: 1.9637366160205605,
631: 1.9637306259223126,
632: 1.9637246548157765,
633: 1.9637187026107747,
634: 1.9637127692177012,
635: 1.9637068545475131,
636: 1.9637009585117295,
637: 1.9636950810224274,
638: 1.9636892219922344,
639: 1.9636833813343266,
640: 1.963677558962424,
641: 1.9636717547907854,
642: 1.9636659687342057,
643: 1.96366020070801,
644: 1.9636544506280507,
645: 1.9636487184107032,
646: 1.9636430039728607,
647: 1.963637307231933,
648: 1.9636316281058388,
649: 1.9636259665130043,
650: 1.9636203223723585,
651: 1.9636146956033296,
652: 1.9636090861258415,
653: 1.9636034938603082,
654: 1.963597918727633,
655: 1.9635923606492014,
656: 1.9635868195468806,
657: 1.9635812953430134,
658: 1.9635757879604159,
659: 1.9635702973223736,
660: 1.9635648233526377,
661: 1.9635593659754214,
662: 1.9635539251153973,
663: 1.9635485006976923,
664: 1.9635430926478856,
665: 1.9635377008920054,
666: 1.9635323253565247,
667: 1.9635269659683576,
668: 1.9635216226548569,
669: 1.963516295343811,
670: 1.9635109839634397,
671: 1.9635056884423918,
672: 1.9635004087097414,
673: 1.9634951446949849,
674: 1.9634898963280374,
675: 1.9634846635392311,
676: 1.9634794462593101,
677: 1.9634742444194289,
678: 1.9634690579511493,
679: 1.9634638867864362,
680: 1.9634587308576554,
681: 1.9634535900975714,
682: 1.9634484644393435,
683: 1.9634433538165224,
684: 1.963438258163049,
685: 1.96343317741325,
686: 1.963428111501836,
687: 1.9634230603638985,
688: 1.9634180239349066,
689: 1.9634130021507055,
690: 1.9634079949475116,
691: 1.9634030022619122,
692: 1.9633980240308617,
693: 1.9633930601916791,
694: 1.963388110682045,
695: 1.9633831754399986,
696: 1.963378254403937,
697: 1.9633733475126116,
698: 1.9633684547051236,
699: 1.9633635759209254,
700: 1.9633587110998145,
701: 1.9633538601819331,
702: 1.9633490231077657,
703: 1.9633441998181338,
704: 1.9633393902541987,
705: 1.9633345943574538,
706: 1.9633298120697256,
707: 1.96332504333317,
708: 1.9633202880902698,
709: 1.9633155462838343,
710: 1.963310817856994,
711: 1.9633061027532,
712: 1.9633014009162226,
713: 1.9632967122901475,
714: 1.9632920368193745,
715: 1.963287374448614,
716: 1.9632827251228866,
717: 1.9632780887875207,
718: 1.9632734653881478,
719: 1.963268854870705,
720: 1.963264257181428,
721: 1.9632596722668525,
722: 1.9632551000738105,
723: 1.9632505405494287,
724: 1.963245993641126,
725: 1.963241459296613,
726: 1.9632369374638876,
727: 1.963232428091235,
728: 1.9632279311272245,
729: 1.963223446520709,
730: 1.9632189742208208,
731: 1.963214514176972,
732: 1.9632100663388516,
733: 1.9632056306564227,
734: 1.9632012070799227,
735: 1.9631967955598593,
736: 1.9631923960470097,
737: 1.9631880084924196,
738: 1.9631836328473993,
739: 1.9631792690635235,
740: 1.9631749170926298,
741: 1.9631705768868148,
742: 1.9631662483984351,
743: 1.9631619315801037,
744: 1.9631576263846882,
745: 1.9631533327653103,
746: 1.9631490506753435,
747: 1.963144780068411,
748: 1.963140520898385,
749: 1.9631362731193833,
750: 1.9631320366857699,
751: 1.9631278115521522,
752: 1.9631235976733785,
753: 1.9631193950045382,
754: 1.963115203500959,
755: 1.963111023118206,
756: 1.9631068538120793,
757: 1.963102695538613,
758: 1.963098548254074,
759: 1.963094411914959,
760: 1.963090286477995,
761: 1.9630861719001376,
762: 1.9630820681385661,
763: 1.963077975150687,
764: 1.963073892894129,
765: 1.9630698213267435,
766: 1.9630657604066017,
767: 1.9630617100919938,
768: 1.9630576703414275,
769: 1.9630536411136277,
770: 1.9630496223675324,
771: 1.963045614062295,
772: 1.963041616157278,
773: 1.9630376286120574,
774: 1.9630336513864166,
775: 1.9630296844403485,
776: 1.9630257277340504,
777: 1.9630217812279265,
778: 1.9630178448825841,
779: 1.963013918658834,
780: 1.9630100025176869,
781: 1.9630060964203544,
782: 1.9630022003282468,
783: 1.9629983142029712,
784: 1.9629944380063318,
785: 1.962990571700327,
786: 1.9629867152471494,
787: 1.9629828686091835,
788: 1.9629790317490055,
789: 1.962975204629381,
790: 1.9629713872132657,
791: 1.9629675794638015,
792: 1.962963781344317,
793: 1.9629599928183272,
794: 1.9629562138495296,
795: 1.9629524444018054,
796: 1.9629486844392179,
797: 1.9629449339260105,
798: 1.9629411928266058,
799: 1.962937461105606,
800: 1.9629337387277892,
801: 1.9629300256581104,
802: 1.9629263218616995,
803: 1.9629226273038602,
804: 1.9629189419500692,
805: 1.9629152657659752,
806: 1.9629115987173975,
807: 1.9629079407703247,
808: 1.9629042918909145,
809: 1.9629006520454917,
810: 1.9628970212005485,
811: 1.9628933993227415,
812: 1.9628897863788926,
813: 1.9628861823359869,
814: 1.962882587161172,
815: 1.9628790008217571,
816: 1.9628754232852115,
817: 1.9628718545191641,
818: 1.9628682944914029,
819: 1.9628647431698727,
820: 1.9628612005226753,
821: 1.9628576665180681,
822: 1.9628541411244633,
823: 1.9628506243104265,
824: 1.962847116044676,
825: 1.962843616296083,
826: 1.9628401250336684,
827: 1.9628366422266041,
828: 1.9628331678442101,
829: 1.962829701855956,
830: 1.9628262442314577,
831: 1.9628227949404782,
832: 1.9628193539529253,
833: 1.962815921238852,
834: 1.9628124967684557,
835: 1.962809080512076,
836: 1.9628056724401943,
837: 1.962802272523434,
838: 1.9627988807325591,
839: 1.9627954970384724,
840: 1.9627921214122162,
841: 1.96278875382497,
842: 1.9627853942480507,
843: 1.9627820426529121,
844: 1.9627786990111424,
845: 1.9627753632944653,
846: 1.962772035474738,
847: 1.962768715523951,
848: 1.962765403414227,
849: 1.9627620991178198,
850: 1.9627588026071152,
851: 1.9627555138546275,
852: 1.9627522328330012,
853: 1.962748959515009,
854: 1.962745693873551,
855: 1.9627424358816548,
856: 1.9627391855124732,
857: 1.9627359427392859,
858: 1.9627327075354966,
859: 1.9627294798746329,
860: 1.9627262597303463,
861: 1.9627230470764099,
862: 1.962719841886719,
863: 1.962716644135291,
864: 1.9627134537962623,
865: 1.9627102708438906,
866: 1.9627070952525512,
867: 1.9627039269967388,
868: 1.9627007660510651,
869: 1.9626976123902597,
870: 1.9626944659891674,
871: 1.9626913268227497,
872: 1.9626881948660826,
873: 1.9626850700943568,
874: 1.9626819524828756,
875: 1.9626788420070573,
876: 1.962675738642431,
877: 1.9626726423646375,
878: 1.9626695531494305,
879: 1.962666470972672,
880: 1.9626633958103352,
881: 1.9626603276385024,
882: 1.962657266433364,
883: 1.962654212171219,
884: 1.962651164828473,
885: 1.962648124381639,
886: 1.962645090807336,
887: 1.9626420640822897,
888: 1.9626390441833281,
889: 1.9626360310873863,
890: 1.9626330247715016,
891: 1.962630025212815,
892: 1.962627032388571,
893: 1.9626240462761142,
894: 1.9626210668528927,
895: 1.9626180940964544,
896: 1.9626151279844477,
897: 1.9626121684946207,
898: 1.9626092156048216,
899: 1.9626062692929966,
900: 1.9626033295371899,
901: 1.9626003963155434,
902: 1.9625974696062964,
903: 1.9625945493877848,
904: 1.9625916356384394,
905: 1.9625887283367882,
906: 1.9625858274614525,
907: 1.962582932991149,
908: 1.9625800449046875,
909: 1.9625771631809725,
910: 1.962574287799,
911: 1.9625714187378587,
912: 1.9625685559767294,
913: 1.9625656994948841,
914: 1.9625628492716856,
915: 1.9625600052865868,
916: 1.9625571675191313,
917: 1.9625543359489512,
918: 1.9625515105557676,
919: 1.9625486913193901,
920: 1.9625458782197165,
921: 1.9625430712367309,
922: 1.962540270350506,
923: 1.9625374755412,
924: 1.962534686789057,
925: 1.962531904074407,
926: 1.9625291273776646,
927: 1.96252635667933,
928: 1.9625235919599864,
929: 1.962520833200302,
930: 1.9625180803810265,
931: 1.962515333482994,
932: 1.9625125924871198,
933: 1.9625098573744026,
934: 1.9625071281259212,
935: 1.962504404722836,
936: 1.9625016871463874,
937: 1.9624989753778976,
938: 1.9624962693987664,
939: 1.9624935691904748,
940: 1.9624908747345817,
941: 1.9624881860127243,
942: 1.9624855030066184,
943: 1.9624828256980582,
944: 1.962480154068913,
945: 1.962477488101131,
946: 1.962474827776736,
947: 1.9624721730778274,
948: 1.962469523986581,
949: 1.9624668804852476,
950: 1.9624642425561525,
951: 1.962461610181696,
952: 1.9624589833443515,
953: 1.9624563620266673,
954: 1.9624537462112641,
955: 1.9624511358808356,
956: 1.9624485310181483,
957: 1.9624459316060407,
958: 1.9624433376274224,
959: 1.9624407490652758,
960: 1.9624381659026522,
961: 1.9624355881226763,
962: 1.962433015708541,
963: 1.9624304486435091,
964: 1.9624278869109137,
965: 1.9624253304941575,
966: 1.9624227793767104,
967: 1.9624202335421121,
968: 1.9624176929739703,
969: 1.9624151576559599,
970: 1.962412627571823,
971: 1.9624101027053702,
972: 1.9624075830404768,
973: 1.9624050685610865,
974: 1.962402559251207,
975: 1.9624000550949139,
976: 1.9623975560763454,
977: 1.962395062179708,
978: 1.9623925733892695,
979: 1.9623900896893647,
980: 1.9623876110643914,
981: 1.9623851374988106,
982: 1.9623826689771475,
983: 1.96238020548399,
984: 1.9623777470039887,
985: 1.962375293521857,
986: 1.9623728450223694,
987: 1.9623704014903631,
988: 1.9623679629107367,
989: 1.9623655292684494,
990: 1.9623631005485223,
991: 1.9623606767360353,
992: 1.9623582578161303,
993: 1.9623558437740083,
994: 1.9623534345949294,
995: 1.9623510302642144,
996: 1.9623486307672415,
997: 1.9623462360894495,
998: 1.962343846216334,
999: 1.962341461133449,
1e3: 1.9623390808264078,
1001: 1.9623367052808791,
1002: 1.9623343344825908,
1003: 1.962331968417326,
1004: 1.9623296070709262,
1005: 1.9623272504292881,
1006: 1.9623248984783654,
1007: 1.9623225512041673,
1008: 1.9623202085927578,
1009: 1.9623178706302578,
1010: 1.9623155373028418,
1011: 1.9623132085967403,
1012: 1.962310884498237,
1013: 1.962308564993671,
1014: 1.962306250069434,
1015: 1.9623039397119733,
1016: 1.9623016339077874,
1017: 1.9622993326434304,
1018: 1.962297035905507,
1019: 1.9622947436806755,
1020: 1.9622924559556474,
1021: 1.962290172717185,
1022: 1.9622878939521027,
1023: 1.9622856196472673,
1024: 1.962283349789597,
infinity: 1.96
}), a = Object.freeze(() => {}), o = (e, t) => {
let n = new globalThis.Event(e);
return t && Object.defineProperty(n, "task", {
configurable: !1,
enumerable: !1,
value: t,
writable: !1
}), n;
}, s = (e, t) => {
let n = new globalThis.Event("error");
return Object.defineProperty(n, "task", {
configurable: !1,
enumerable: !1,
value: e,
writable: !1
}), Object.defineProperty(n, "error", {
configurable: !1,
enumerable: !1,
value: t,
writable: !1
}), n;
};
let c = /* @__PURE__ */ function(e) {
return e.browser = "browser", e.bun = "bun", e.deno = "deno", e["edge-light"] = "edge-light", e.fastly = "fastly", e.hermes = "hermes", e.jsc = "jsc", e.lagon = "lagon", e.moddable = "moddable", e.netlify = "netlify", e.node = "node", e["quickjs-ng"] = "quickjs-ng", e.spidermonkey = "spidermonkey", e.v8 = "v8", e.workerd = "workerd", e;
}({});
const l = !!globalThis.Bun || !!globalThis.process?.versions?.bun, u = !!globalThis.Deno, d = globalThis.process?.release?.name === "node", f = !!globalThis.HermesInternal, p = globalThis.navigator?.userAgent === "Cloudflare-Workers", m = !!globalThis.navigator?.userAgent?.toLowerCase?.()?.includes?.("quickjs-ng"), h = typeof globalThis.Netlify == "object", g = typeof globalThis.EdgeRuntime == "string", _ = !!globalThis.__lagon__, v = !!globalThis.fastly, y = !!globalThis.$262 && !!globalThis.lockdown && !!globalThis.AsyncDisposableStack, b = !!globalThis.d8, x = !!globalThis.inIon && !!globalThis.performance?.mozMemory, S = !!globalThis.$ && "IsHTMLDDA" in globalThis.$, C = !!globalThis.window && !!globalThis.navigator, w = (() => l ? c.bun : u ? c.deno : d ? c.node : f ? c.hermes : h ? c.netlify : g ? c["edge-light"] : _ ? c.lagon : v ? c.fastly : p ? c.workerd : m ? c["quickjs-ng"] : y ? c.moddable : b ? c.v8 : x ? c.spidermonkey : S ? c.jsc : C ? c.browser : "unknown")(), T = (() => w === c.bun ? globalThis.Bun?.version : w === c.deno ? globalThis.Deno?.version?.deno : w === c.node ? globalThis.process?.versions?.node : w === c.hermes ? globalThis.HermesInternal?.getRuntimeProperties?.()?.["OSS Release Version"] : w === c.v8 ? globalThis.version?.() : w === c["quickjs-ng"] ? globalThis.navigator?.userAgent?.split?.("/")[1] : "unknown")(), E = (e) => e / 1e6, D = (e) => e * 1e6, O = (e, t, n) => {
if (typeof e != "number") return String(e);
if (e === Infinity) return "+∞";
if (e === -Infinity) return "-∞";
if (Number.isNaN(e)) return "NaN";
let r = Math.abs(e);
if (r >= 10 ** t) return e.toFixed();
if (r < 10 ** (t - n)) return e.toFixed(n);
let i = r >= 1 ? Math.floor(Math.log10(r)) + 1 : 0, a = Math.max(0, t - i);
return a = Math.min(a, n), e.toFixed(a);
};
let k;
k = typeof globalThis.process?.hrtime?.bigint == "function" ? globalThis.process.hrtime.bigint.bind(process.hrtime) : () => {
throw Error("hrtime.bigint() is not supported in this JS environment");
};
const A = () => E(Number(k())), j = performance.now.bind(performance), M = j, N = (e) => e !== null && (typeof e == "object" || typeof e == "function") && typeof e.then == "function", P = (e) => e?.constructor === (async () => {}).constructor, F = (e) => {
if (e == null) return !1;
if (P(e)) return !0;
try {
let t = e(), n = N(t);
if (n) try {
t.then(a)?.catch(a);
} catch {}
return n;
} catch {
return !1;
}
}, I = (e) => {
if (e.length === 0) throw Error("samples must not be empty");
return e.reduce((e, t) => e + t, 0) / e.length || 0;
}, L = (e, t = I(e)) => {
if (e.length <= 1) return 0;
let n = e.reduce((e, n) => e + (n - t) ** 2, 0);
return n / (e.length - 1);
}, R = (e, t) => {
if (e.length === 0) throw Error("samples must not be empty");
if (t < 0 || t > 1) throw Error("q must be between 0 and 1");
if (t === 0) return e[0];
if (t === 1) return e[e.length - 1];
let n = (e.length - 1) * t, r = Math.floor(n);
return e[r + 1] == null ? e[r] : e[r] + (n - r) * (e[r + 1] - e[r]);
}, z = (e) => R(e, .5), B = (e) => z([...e].sort((e, t) => e - t)), V = (e, t, n = t(e)) => {
let r = [];
for (let t of e) r.push(Math.abs(t - n));
return t(r);
}, H = (e) => {
let t = I(e), n = L(e, t), r = Math.sqrt(n), a = r / Math.sqrt(e.length), o = e.length - 1, s = i[(Math.round(o) || 1).toString()] || i.infinity, c = a * s, l = Math.abs(t), u = l === 0 ? Infinity : c / l * 100, d = z(e);
return {
aad: V(e, I, t),
critical: s,
df: o,
mad: V(e, B, d),
max: e[o],
mean: t,
min: e[0],
moe: c,
p50: d,
p75: R(e, .75),
p99: R(e, .99),
p995: R(e, .995),
p999: R(e, .999),
rme: u,
samples: e,
sd: r,
sem: a,
variance: n
};
}, U = (e, t) => {
if (!e) throw Error(t);
};
var W = class extends EventTarget {
name;
result;
runs = 0;
async;
bench;
fn;
fnOpts;
constructor(e, t, n, r = {}) {
super(), this.bench = e, this.name = t, this.fn = n, this.fnOpts = r, this.async = F(n);
}
addEventListener(e, t, n) {
super.addEventListener(e, t, n);
}
removeEventListener(e, t, n) {
super.removeEventListener(e, t, n);
}
reset() {
this.dispatchEvent(o("reset", this)), this.runs = 0, this.result = void 0;
}
async run() {
if (this.result?.error) return this;
this.dispatchEvent(o("start", this)), await this.bench.opts.setup(this, "run");
let { error: e, samples: t } = await this.benchmark("run", this.bench.opts.time, this.bench.opts.iterations);
return await this.bench.opts.teardown(this, "run"), this.processRunResult({
error: e,
latencySamples: t
}), this;
}
runSync() {
if (this.result?.error) return this;
U(this.bench.concurrency === null, "Cannot use `concurrency` option when using `runSync`"), this.dispatchEvent(o("start", this));
let e = this.bench.opts.setup(this, "run");
U(!N(e), "`setup` function must be sync when using `runSync()`");
let { error: t, samples: n } = this.benchmarkSync("run", this.bench.opts.time, this.bench.opts.iterations), r = this.bench.opts.teardown(this, "run");
return U(!N(r), "`teardown` function must be sync when using `runSync()`"), this.processRunResult({
error: t,
latencySamples: n
}), this;
}
async warmup() {
if (this.result?.error) return;
this.dispatchEvent(o("warmup", this)), await this.bench.opts.setup(this, "warmup");
let { error: e } = await this.benchmark("warmup", this.bench.opts.warmupTime, this.bench.opts.warmupIterations);
await this.bench.opts.teardown(this, "warmup"), this.postWarmup(e);
}
warmupSync() {
if (this.result?.error) return;
this.dispatchEvent(o("warmup", this));
let e = this.bench.opts.setup(this, "warmup");
U(!N(e), "`setup` function must be sync when using `runSync()`");
let { error: t } = this.benchmarkSync("warmup", this.bench.opts.warmupTime, this.bench.opts.warmupIterations), n = this.bench.opts.teardown(this, "warmup");
U(!N(n), "`teardown` function must be sync when using `runSync()`"), this.postWarmup(t);
}
async benchmark(e, t, r) {
if (this.fnOpts.beforeAll != null) try {
await this.fnOpts.beforeAll.call(this, e);
} catch (e) {
return { error: e };
}
let i = 0, a = [], o = async () => {
if (!this.bench.opts.signal?.aborted) try {
this.fnOpts.beforeEach != null && await this.fnOpts.beforeEach.call(this, e);
let t;
this.async ? {taskTime: t} = await this.measureOnce() : {taskTime: t} = this.measureOnceSync(), a.push(t), i += t;
} finally {
this.fnOpts.afterEach != null && await this.fnOpts.afterEach.call(this, e);
}
};
try {
let e;
this.bench.concurrency === "task" && (e = n(Math.max(1, Math.floor(this.bench.threshold))));
let s = [];
for (; (i < t || a.length + (e?.activeCount ?? 0) + (e?.pendingCount ?? 0) < r) && !this.bench.opts.signal?.aborted;) this.bench.concurrency === "task" ? s.push(e(o)) : await o();
!this.bench.opts.signal?.aborted && s.length > 0 ? await Promise.all(s) : s.length > 0 && Promise.allSettled(s);
} catch (e) {
return { error: e };
}
if (this.fnOpts.afterAll != null) try {
await this.fnOpts.afterAll.call(this, e);
} catch (e) {
return { error: e };
}
return { samples: a };
}
benchmarkSync(e, t, n) {
if (this.fnOpts.beforeAll != null) try {
let t = this.fnOpts.beforeAll.call(this, e);
U(!N(t), "`beforeAll` function must be sync when using `runSync()`");
} catch (e) {
return { error: e };
}
let r = 0, i = [], a = () => {
if (!this.bench.opts.signal?.aborted) try {
if (this.fnOpts.beforeEach != null) {
let t = this.fnOpts.beforeEach.call(this, e);
U(!N(t), "`beforeEach` function must be sync when using `runSync()`");
}
let { taskTime: t } = this.measureOnceSync();
i.push(t), r += t;
} finally {
if (this.fnOpts.afterEach != null) {
let t = this.fnOpts.afterEach.call(this, e);
U(!N(t), "`afterEach` function must be sync when using `runSync()`");
}
}
};
try {
for (; (r < t || i.length < n) && !this.bench.opts.signal?.aborted;) a();
} catch (e) {
return { error: e };
}
if (this.fnOpts.afterAll != null) try {
let t = this.fnOpts.afterAll.call(this, e);
U(!N(t), "`afterAll` function must be sync when using `runSync()`");
} catch (e) {
return { error: e };
}
return { samples: i };
}
async measureOnce() {
let e = this.bench.opts.now(), t = await this.fn.call(this), n = this.bench.opts.now() - e, r = G(t);
return r != null && (n = r), {
fnResult: t,
taskTime: n
};
}
measureOnceSync() {
let e = this.bench.opts.now(), t = this.fn.call(this), n = this.bench.opts.now() - e;
U(!N(t), "task function must be sync when using `runSync()`");
let r = G(t);
return r != null && (n = r), {
fnResult: t,
taskTime: n
};
}
mergeTaskResult(e) {
this.result = Object.freeze({
...this.result,
...e
});
}
postWarmup(e) {
if (e && (this.mergeTaskResult({ error: e }), this.dispatchEvent(s(this, e)), this.bench.dispatchEvent(s(this, e)), this.bench.opts.throws)) throw e;
}
processRunResult({ error: e, latencySamples: t }) {
if (t && t.length > 0) {
this.runs = t.length;
let e = t.reduce((e, t) => e + t, 0), n = H(t.sort((e, t) => e - t)), r = t.map((e) => e === 0 ? n.mean === 0 ? 0 : 1e3 / n.mean : 1e3 / e).sort((e, t) => e - t), i = H(r);
this.mergeTaskResult({
aborted: this.bench.opts.signal?.aborted ?? !1,
critical: n.critical,
df: n.df,
hz: i.mean,
latency: n,
max: n.max,
mean: n.mean,
min: n.min,
moe: n.moe,
p75: n.p75,
p99: n.p99,
p995: n.p995,
p999: n.p999,
period: e / this.runs,
rme: n.rme,
runtime: this.bench.runtime,
runtimeVersion: this.bench.runtimeVersion,
samples: n.samples,
sd: n.sd,
sem: n.sem,
throughput: i,
totalTime: e,
variance: n.variance
});
}
if (e && (this.mergeTaskResult({ error: e }), this.dispatchEvent(s(this, e)), this.bench.dispatchEvent(s(this, e)), this.bench.opts.throws)) throw e;
this.dispatchEvent(o("cycle", this)), this.bench.dispatchEvent(o("cycle", this)), this.dispatchEvent(o("complete", this));
}
};
function G(e) {
if (typeof e == "object" && e && "overriddenDuration" in e && typeof e.overriddenDuration == "number" && Number.isFinite(e.overriddenDuration) && e.overriddenDuration >= 0) return e.overriddenDuration;
}
var K = class extends EventTarget {
concurrency = null;
name;
opts;
runtime;
runtimeVersion;
threshold = Infinity;
get results() {
return [...this._tasks.values()].map((e) => e.result);
}
get tasks() {
return [...this._tasks.values()];
}
_tasks = /* @__PURE__ */ new Map();
constructor(e = {}) {
super();
let { name: t,...n } = e;
this.name = t, this.runtime = w, this.runtimeVersion = T, this.opts = {
iterations: 64,
now: M,
setup: a,
teardown: a,
throws: !1,
time: 1e3,
warmup: !0,
warmupIterations: 16,
warmupTime: 250,
...n
}, this.opts.signal && this.opts.signal.addEventListener("abort", () => {
this.dispatchEvent(o("abort"));
}, { once: !0 });
}
add(e, t, n = {}) {
if (this._tasks.has(e)) throw Error(`Task "${e}" already exists`);
{
let r = new W(this, e, t, n);
this._tasks.set(e, r), this.dispatchEvent(o("add", r));
}
return this;
}
addEventListener(e, t, n) {
super.addEventListener(e, t, n);
}
getTask(e) {
return this._tasks.get(e);
}
remove(e) {
let t = this.getTask(e);
return t && (this.dispatchEvent(o("remove", t)), this._tasks.delete(e)), this;
}
removeEventListener(e, t, n) {
super.removeEventListener(e, t, n);
}
reset() {
this.dispatchEvent(o("reset"));
for (let e of this._tasks.values()) e.reset();
}
async run() {
this.opts.warmup && await this.warmupTasks();
let e = [];
if (this.dispatchEvent(o("start")), this.concurrency === "bench") e = await this.mapTasksConcurrently((e) => e.run());
else for (let t of this._tasks.values()) e.push(await t.run());
return this.dispatchEvent(o("complete")), e;
}
runSync() {
U(this.concurrency === null, "Cannot use `concurrency` option when using `runSync`"), this.opts.warmup && this.warmupTasksSync();
let e = [];
this.dispatchEvent(o("start"));
for (let t of this._tasks.values()) e.push(t.runSync());
return this.dispatchEvent(o("complete")), e;
}
table(e) {
return this.tasks.map((t) => {
if (t.result) {
let { error: n, latency: r, throughput: i } = t.result;
return n ? {
"Task name": t.name,
Error: n.message,
Stack: n.stack
} : e?.(t) ?? {
"Task name": t.name,
"Latency avg (ns)": `${O(D(r.mean), 5, 2)} \xb1 ${r.rme.toFixed(2)}%`,
"Latency med (ns)": `${O(D(r.p50), 5, 2)} \xb1 ${O(D(r.mad), 5, 2)}`,
"Throughput avg (ops/s)": `${Math.round(i.mean).toString()} \xb1 ${i.rme.toFixed(2)}%`,
"Throughput med (ops/s)": `${Math.round(i.p50).toString()} \xb1 ${Math.round(i.mad).toString()}`,
Samples: r.samples.length
};
}
return null;
});
}
async mapTasksConcurrently(e) {
let t = n(Math.max(1, Math.floor(this.threshold))), r = [];
for (let n of this._tasks.values()) r.push(t(() => e(n)));
return Promise.all(r);
}
async warmupTasks() {
if (this.dispatchEvent(o("warmup")), this.concurrency === "bench") await this.mapTasksConcurrently((e) => e.warmup());
else for (let e of this._tasks.values()) await e.warmup();
}
warmupTasksSync() {
this.dispatchEvent(o("warmup"));
for (let e of this._tasks.values()) e.warmupSync();
}
};
export { K as Bench, W as Task, A as hrtimeNow, E as nToMs, M as now };
var Node=class{value;next;constructor(u){this.value=u}},Queue=class{#head;#tail;#size;constructor(){this.clear()}enqueue(F){let I=new Node(F);this.#head?(this.#tail.next=I,this.#tail=I):(this.#head=I,this.#tail=I),this.#size++}dequeue(){let u=this.#head;if(u)return this.#head=this.#head.next,this.#size--,u.value}peek(){if(this.#head)return this.#head.value}clear(){this.#head=void 0,this.#tail=void 0,this.#size=0}get size(){return this.#size}*[Symbol.iterator](){let u=this.#head;for(;u;)yield u.value,u=u.next}*drain(){for(;this.#head;)yield this.dequeue()}};function pLimit(u){validateConcurrency(u);let I=new Queue,R=0,z=()=>{R<u&&I.size>0&&(R++,I.dequeue()())},B=()=>{R--,z()},V=async(u,F,I)=>{let L=(async()=>u(...I))();F(L);try{await L}catch{}B()},H=(F,L,B)=>{new Promise(u=>{I.enqueue(u)}).then(V.bind(void 0,F,L,B)),R<u&&z()},U=(u,...F)=>new Promise(I=>{H(u,I,F)});return Object.defineProperties(U,{activeCount:{get:()=>R},pendingCount:{get:()=>I.size},clearQueue:{value(){I.clear()}},concurrency:{get:()=>u,set(F){validateConcurrency(F),u=F,queueMicrotask(()=>{for(;R<u&&I.size>0;)z()})}},map:{async value(u,F){let I=Array.from(u,(u,I)=>this(F,u,I));return Promise.all(I)}}}),U}function validateConcurrency(u){if(!((Number.isInteger(u)||u===1/0)&&u>0))throw TypeError("Expected `concurrency` to be a number from 1 and up")}const tTable=Object.freeze({1:12.706204736432102,2:4.3026527299112765,3:3.182446305284264,4:2.7764451051977996,5:2.57058183661474,6:2.446911848791681,7:2.3646242510102997,8:2.306004135033371,9:2.262157162740992,10:2.2281388519649385,11:2.200985160082949,12:2.178812829663418,13:2.160368656461013,14:2.1447866879169277,15:2.131449545559323,16:2.1199052992210112,17:2.109815577833181,18:2.10092204024096,19:2.0930240544082634,20:2.085963447265837,21:2.0796138447276626,22:2.073873067904015,23:2.068657610419041,24:2.063898561628021,25:2.0595385527532946,26:2.0555294386428713,27:2.0518305164802837,28:2.048407141795244,29:2.0452296421327034,30:2.042272456301238,31:2.0395134463964077,32:2.0369333434601016,33:2.0345152974493383,34:2.0322445093177186,35:2.030107928250343,36:2.0280940009804507,37:2.0261924630291097,38:2.0243941645751367,39:2.0226909117347285,40:2.021075382995338,41:2.019540963982894,42:2.0180816970958815,43:2.0166921941428138,44:2.0153675699129416,45:2.0141033848332928,46:2.012895595294589,47:2.011740510475755,48:2.010634754696446,49:2.0095752344892093,50:2.0085591097152062,51:2.0075837681558824,52:2.0066468031022118,53:2.00574599353695,54:2.0048792865665233,55:2.0040447818101814,56:2.003240717496698,57:2.002465458054599,58:2.0017174830120927,59:2.0009953770482105,60:2.000297821058262,61:1.9996235841149783,62:1.9989715162223116,63:1.998340541772196,64:1.9977296536259739,65:1.9971379077520126,66:1.9965644183594748,67:1.996008353475506,68:1.9954689309194023,69:1.994945414632814,70:1.9944371113297732,71:1.9939433674345044,72:1.9934635662785831,73:1.9929971255321668,74:1.9925434948468204,75:1.9921021536898658,76:1.9916726093523491,77:1.9912543951146042,78:1.9908470685550523,79:1.9904502099893606,80:1.9900634210283845,81:1.9896863232444832,82:1.989318556936819,83:1.9889597799871794,84:1.9886096667986737,85:1.988267907310378,86:1.9879342060816723,87:1.9876082814405773,88:1.987289864690939,89:1.9869786993737681,90:1.9866745405784685,91:1.9863771543000652,92:1.9860863168388938,93:1.985801814239503,94:1.9855234417658303,95:1.9852510034099267,96:1.9849843114317696,97:1.9847231859278835,98:1.9844674544266925,99:1.9842169515086832,100:1.983971518449634,101:1.9837310028852815,102:1.9834952584959407,103:1.9832641447097104,104:1.9830375264229902,105:1.9828152737371547,106:1.9825972617102912,107:1.9823833701230178,108:1.9821734832574516,109:1.9819674896884745,110:1.9817652820865104,111:1.981566757031071,112:1.9813718148344008,113:1.9811803593745805,114:1.9809922979375068,115:1.9808075410672004,116:1.980626002423938,117:1.9804475986497296,118:1.9802722492407063,119:1.9800998764260065,120:1.979930405052777,121:1.9797637624769306,122:1.9795998784593314,123:1.97943868506709,124:1.979280116579683,125:1.9791241093996175,126:1.9789706019673938,127:1.978819534680521,128:1.9786708498163625,129:1.9785244914586055,130:1.9783804054271532,131:1.9782385392112587,132:1.9780988419057237,133:1.977961264150002,134:1.9778257580700531,135:1.9776922772228045,136:1.9775607765430836,137:1.977431212292894,138:1.9773035420129166,139:1.9771777244761224,140:1.9770537196433886,141:1.9769314886210223,142:1.97681099362009,143:1.9766921979174685,144:1.9765750658185368,145:1.9764595626214163,146:1.9763456545827007,147:1.9762333088845883,148:1.9761224936033637,149:1.9760131776791554,150:1.9759053308869141,151:1.9757989238085507,152:1.975693927806187,153:1.9755903149964589,154:1.9754880582258323,155:1.9753871310468787,156:1.9752875076954728,157:1.9751891630688665,158:1.9750920727046015,159:1.9749962127602256,160:1.9749015599937723,161:1.9748080917449764,162:1.9747157859171882,163:1.9746246209599583,164:1.9745345758522659,165:1.9744456300863593,166:1.9743577636521858,167:1.9742709570223849,168:1.974185191137821,169:1.9741004473936339,170:1.9740167076257829,171:1.9739339540980692,172:1.9738521694896138,173:1.9737713368827694,174:1.9736914397514562,175:1.9736124619498976,176:1.9735343877017435,177:1.9734572015895646,178:1.9733808885447033,179:1.9733054338374667,180:1.973230823067649,181:1.9731570421553692,182:1.9730840773322162,183:1.9730119151326795,184:1.9729405423858692,185:1.9728699462074992,186:1.9728001139921352,187:1.9727310334056907,188:1.9726626923781656,189:1.9725950790966158,190:1.9725281819983451,191:1.972461989764315,192:1.9723964913127596,193:1.9723316757930012,194:1.9722675325794565,195:1.972204051265833,196:1.9721412216594971,197:1.9720790337760221,198:1.972017477833896,199:1.9719565442493954,200:1.9718962236316093,201:1.9718365067776158,202:1.971777384667801,203:1.971718848461318,204:1.9716608894916787,205:1.971603499262479,206:1.9715466694432433,207:1.9714903918653972,208:1.9714346585183509,209:1.9713794615456992,210:1.9713247932415296,211:1.9712706460468354,212:1.9712170125460335,213:1.9711638854635767,214:1.971111257660664,215:1.9710591221320446,216:1.9710074720029072,217:1.97095630052586,218:1.9709056010779908,219:1.9708553671580111,220:1.9708055923834753,221:1.970756270488079,222:1.9707073953190282,223:1.9706589608344816,224:1.9706109611010594,225:1.9705633902914228,226:1.9705162426819125,227:1.9704695126502556,228:1.9704231946733297,229:1.9703772833249869,230:1.9703317732739336,231:1.9702866592816697,232:1.9702419362004757,233:1.9701975989714555,234:1.9701536426226303,235:1.9701100622670775,236:1.9700668531011214,237:1.9700240104025675,238:1.9699815295289818,239:1.969939405916016,240:1.9698976350757686,241:1.9698562125951948,242:1.9698151341345516,243:1.9697743954258797,244:1.9697339922715287,245:1.9696939205427133,246:1.9696541761781068,247:1.9696147551824699,248:1.9695756536253115,249:1.9695368676395828,250:1.9694983934204007,251:1.9694602272238055,252:1.9694223653655467,253:1.969384804219895,254:1.9693475402184863,255:1.9693105698491933,256:1.9692738896550193,257:1.9692374962330224,258:1.9692013862332616,259:1.9691655563577715,260:1.9691300033595551,261:1.9690947240416052,262:1.9690597152559448,263:1.9690249739026924,264:1.9689904969291443,265:1.968956281328883,266:1.9689223241409022,267:1.9688886224487527,268:1.9688551733797075,269:1.968821974103945,270:1.9687890218337525,271:1.968756313822743,272:1.968723847365097,273:1.9686916197948103,274:1.9686596284849691,275:1.9686278708470335,276:1.9685963443301415,277:1.968565046420423,278:1.9685339746403347,279:1.9685031265480044,280:1.9684724997365923,281:1.968442091833664,282:1.968411900500579,283:1.9683819234318907,284:1.9683521583547587,285:1.9683226030283762,286:1.9682932552434063,287:1.968264112821431,288:1.9682351736144144,289:1.9682064355041722,290:1.968177896401857,291:1.968149554247451,292:1.9681214070092705,293:1.9680934526834821,294:1.9680656892936232,295:1.968038114890141,296:1.9680107275499321,297:1.9679835253758984,298:1.967956506496507,299:1.9679296690653623,300:1.9679030112607847,301:1.9678765312853979,302:1.967850227365727,303:1.9678240977517998,304:1.967798140716761,305:1.9677723545564905,306:1.967746737589231,307:1.9677212881552217,308:1.967696004616341,309:1.967670885355754,310:1.9676459287775685,311:1.9676211333064957,312:1.9675964973875213,313:1.967572019485578,314:1.967547698085227,315:1.9675235316903468,316:1.9674995188238256,317:1.9674756580272583,318:1.9674519478606556,319:1.96742838690215,320:1.9674049737477135,321:1.9673817070108799,322:1.9673585853224684,323:1.9673356073303163,324:1.9673127716990173,325:1.9672900771096589,326:1.9672675222595717,327:1.9672451058620788,328:1.9672228266462515,329:1.9672006833566689,330:1.9671786747531816,331:1.9671567996106818,332:1.967135056718874,333:1.9671134448820529,334:1.9670919629188843,335:1.9670706096621893,336:1.967049383958733,337:1.9670282846690177,338:1.9670073106670771,339:1.9669864608402783,340:1.966965734089124,341:1.9669451293270586,342:1.9669246454802793,343:1.9669042814875488,344:1.9668840363000124,345:1.966863908881019,346:1.9668438982059417,347:1.966824003262006,348:1.9668042230481186,349:1.9667845565746986,350:1.9667650028635129,351:1.9667455609475144,352:1.9667262298706825,353:1.966707008687866,354:1.9666878964646288,355:1.9666688922770996,356:1.9666499952118222,357:1.9666312043656085,358:1.9666125188453965,359:1.9665939377681074,360:1.9665754602605063,361:1.9665570854590666,362:1.9665388125098342,363:1.966520640568296,364:1.9665025687992495,365:1.966484596376675,366:1.9664667224836099,367:1.9664489463120245,368:1.9664312670626998,369:1.9664136839451096,370:1.9663961961773,371:1.966378802985776,372:1.9663615036053859,373:1.9663442972792093,374:1.9663271832584475,375:1.9663101608023135,376:1.966293229177927,377:1.9662763876602067,378:1.96625963553177,379:1.9662429720828285,380:1.9662263966110878,381:1.9662099084216513,382:1.9661935068269203,383:1.9661771911465,384:1.9661609607071053,385:1.9661448148424667,386:1.9661287528932416,387:1.9661127742069229,388:1.9660968781377508,389:1.966081064046626,390:1.966065331301024,391:1.966049679274911,392:1.9660341073486605,393:1.9660186149089722,394:1.9660032013487905,395:1.9659878660672256,396:1.9659726084694753,397:1.9659574279667498,398:1.965942323976193,399:1.9659272959208094,400:1.9659123432293915,401:1.9658974653364458,402:1.9658826616821223,403:1.965867931712145,404:1.9658532748777406,405:1.9658386906355727,406:1.9658241784476738,407:1.965809737781378,408:1.9657953681092573,409:1.9657810689090576,410:1.9657668396636336,411:1.965752679860889,412:1.9657385889937122,413:1.9657245665599175,414:1.9657106120621863,415:1.9656967250080057,416:1.9656829049096134,417:1.9656691512839384,418:1.965655463652545,419:1.9656418415415793,420:1.9656282844817121,421:1.9656147920080864,422:1.9656013636602634,423:1.9655879989821707,424:1.9655746975220507,425:1.9655614588324102,426:1.965548282469968,427:1.9655351679956077,428:1.9655221149743287,429:1.9655091229751978,430:1.9654961915712998,431:1.9654833203396942,432:1.9654705088613673,433:1.9654577567211857,434:1.965445063507854,435:1.965432428813868,436:1.9654198522354724,437:1.9654073333726187,438:1.9653948718289207,439:1.9653824672116142,440:1.9653701191315152,441:1.9653578272029781,442:1.9653455910438589,443:1.9653334102754718,444:1.9653212845225516,445:1.9653092134132164,446:1.9652971965789277,447:1.9652852336544535,448:1.9652733242778317,449:1.9652614680903338,450:1.9652496647364275,451:1.9652379138637432,452:1.9652262151230366,453:1.9652145681681563,454:1.9652029726560083,455:1.9651914282465226,456:1.9651799346026202,457:1.9651684913901803,458:1.9651570982780076,459:1.9651457549378,460:1.9651344610441186,461:1.9651232162743548,462:1.9651120203087005,463:1.9651008728301178,464:1.9650897735243085,465:1.9650787220796855,466:1.9650677181873428,467:1.965056761541027,468:1.965045851837109,469:1.965034988774555,470:1.965024172054902,471:1.9650134013822251,472:1.9650026764631154,473:1.9649919970066518,474:1.9649813627243728,475:1.964970773330254,476:1.9649602285406784,477:1.9649497280744153,478:1.9649392716525922,479:1.964928858998672,480:1.9649184898384262,481:1.9649081638999137,482:1.9648978809134563,483:1.9648876406116125,484:1.9648774427291587,485:1.9648672870030628,486:1.9648571731724636,487:1.9648471009786466,488:1.9648370701650248,489:1.9648270804771135,490:1.9648171316625118,491:1.964807223470879,492:1.9647973556539153,493:1.9647875279653397,494:1.9647777401608706,495:1.9647679919982053,496:1.9647582832369994,497:1.9647486136388483,498:1.9647389829672652,499:1.9647293909876653,500:1.9647198374673442,501:1.9647103221754598,502:1.964700844883014,503:1.9646914053628335,504:1.9646820033895525,505:1.964672638739595,506:1.9646633111911553,507:1.9646540205241838,508:1.9646447665203655,509:1.964635548963106,510:1.9646263676375137,511:1.9646172223303833,512:1.9646081128301776,513:1.9645990389270147,514:1.9645900004126484,515:1.9645809970804544,516:1.9645720287254127,517:1.9645630951440949,518:1.964554196134645,519:1.9645453314967691,520:1.9645365010317148,521:1.9645277045422602,522:1.9645189418326983,523:1.964510212708822,524:1.964501516977911,525:1.964492854448715,526:1.9644842249314425,527:1.9644756282377454,528:1.9644670641807058,529:1.964458532574823,530:1.9644500332359982,531:1.9644415659815229,532:1.9644331306300662,533:1.9644247270016604,534:1.964416354917689,535:1.9644080142008735,536:1.9643997046752626,537:1.9643914261662165,538:1.9643831785003991,539:1.9643749615057613,540:1.9643667750115323,541:1.964358618848207,542:1.9643504928475335,543:1.964342396842502,544:1.9643343306673333,545:1.9643262941574684,546:1.9643182871495555,547:1.9643103094814403,548:1.964302360992155,549:1.9642944415219068,550:1.9642865509120675,551:1.9642786890051633,552:1.964270855644863,553:1.9642630506759702,554:1.9642552739444101,555:1.9642475252972216,556:1.9642398045825453,557:1.9642321116496164,558:1.9642244463487513,559:1.9642168085313412,560:1.9642091980498402,561:1.9642016147577568,562:1.964194058509645,563:1.9641865291610932,564:1.9641790265687171,565:1.964171550590149,566:1.9641641010840303,567:1.9641566779100006,568:1.9641492809286911,569:1.964141910001714,570:1.964134564991655,571:1.9641272457620647,572:1.9641199521774493,573:1.964112684103263,574:1.9641054414058998,575:1.9640982239526847,576:1.964091031611867,577:1.9640838642526093,578:1.964076721744983,579:1.9640696039599586,580:1.9640625107693983,581:1.9640554420460483,582:1.9640483976635308,583:1.9640413774963374,584:1.964034381419821,585:1.9640274093101877,586:1.9640204610444916,587:1.9640135365006257,588:1.9640066355573154,589:1.9639997580941106,590:1.963992903991381,591:1.9639860731303063,592:1.9639792653928712,593:1.9639724806618581,594:1.9639657188208401,595:1.9639589797541745,596:1.963952263346997,597:1.963945569485213,598:1.963938898055494,599:1.9639322489452695,600:1.96392562204272,601:1.9639190172367733,602:1.963912434417095,603:1.963905873474085,604:1.9638993342988706,605:1.9638928167832999,606:1.9638863208199362,607:1.9638798463020526,608:1.9638733931236256,609:1.9638669611793291,610:1.9638605503645292,611:1.9638541605752786,612:1.9638477917083106,613:1.963841443661033,614:1.9638351163315244,615:1.9638288096185263,616:1.9638225234214404,617:1.9638162576403206,618:1.96381001217587,619:1.9638037869294331,620:1.9637975818029945,621:1.9637913966991682,622:1.9637852315211985,623:1.9637790861729507,624:1.963772960558908,625:1.9637668545841658,626:1.9637607681544267,627:1.963754701175997,628:1.96374865355578,629:1.9637426252012729,630:1.9637366160205605,631:1.9637306259223126,632:1.9637246548157765,633:1.9637187026107747,634:1.9637127692177012,635:1.9637068545475131,636:1.9637009585117295,637:1.9636950810224274,638:1.9636892219922344,639:1.9636833813343266,640:1.963677558962424,641:1.9636717547907854,642:1.9636659687342057,643:1.96366020070801,644:1.9636544506280507,645:1.9636487184107032,646:1.9636430039728607,647:1.963637307231933,648:1.9636316281058388,649:1.9636259665130043,650:1.9636203223723585,651:1.9636146956033296,652:1.9636090861258415,653:1.9636034938603082,654:1.963597918727633,655:1.9635923606492014,656:1.9635868195468806,657:1.9635812953430134,658:1.9635757879604159,659:1.9635702973223736,660:1.9635648233526377,661:1.9635593659754214,662:1.9635539251153973,663:1.9635485006976923,664:1.9635430926478856,665:1.9635377008920054,666:1.9635323253565247,667:1.9635269659683576,668:1.9635216226548569,669:1.963516295343811,670:1.9635109839634397,671:1.9635056884423918,672:1.9635004087097414,673:1.9634951446949849,674:1.9634898963280374,675:1.9634846635392311,676:1.9634794462593101,677:1.9634742444194289,678:1.9634690579511493,679:1.9634638867864362,680:1.9634587308576554,681:1.9634535900975714,682:1.9634484644393435,683:1.9634433538165224,684:1.963438258163049,685:1.96343317741325,686:1.963428111501836,687:1.9634230603638985,688:1.9634180239349066,689:1.9634130021507055,690:1.9634079949475116,691:1.9634030022619122,692:1.9633980240308617,693:1.9633930601916791,694:1.963388110682045,695:1.9633831754399986,696:1.963378254403937,697:1.9633733475126116,698:1.9633684547051236,699:1.9633635759209254,700:1.9633587110998145,701:1.9633538601819331,702:1.9633490231077657,703:1.9633441998181338,704:1.9633393902541987,705:1.9633345943574538,706:1.9633298120697256,707:1.96332504333317,708:1.9633202880902698,709:1.9633155462838343,710:1.963310817856994,711:1.9633061027532,712:1.9633014009162226,713:1.9632967122901475,714:1.9632920368193745,715:1.963287374448614,716:1.9632827251228866,717:1.9632780887875207,718:1.9632734653881478,719:1.963268854870705,720:1.963264257181428,721:1.9632596722668525,722:1.9632551000738105,723:1.9632505405494287,724:1.963245993641126,725:1.963241459296613,726:1.9632369374638876,727:1.963232428091235,728:1.9632279311272245,729:1.963223446520709,730:1.9632189742208208,731:1.963214514176972,732:1.9632100663388516,733:1.9632056306564227,734:1.9632012070799227,735:1.9631967955598593,736:1.9631923960470097,737:1.9631880084924196,738:1.9631836328473993,739:1.9631792690635235,740:1.9631749170926298,741:1.9631705768868148,742:1.9631662483984351,743:1.9631619315801037,744:1.9631576263846882,745:1.9631533327653103,746:1.9631490506753435,747:1.963144780068411,748:1.963140520898385,749:1.9631362731193833,750:1.9631320366857699,751:1.9631278115521522,752:1.9631235976733785,753:1.9631193950045382,754:1.963115203500959,755:1.963111023118206,756:1.9631068538120793,757:1.963102695538613,758:1.963098548254074,759:1.963094411914959,760:1.963090286477995,761:1.9630861719001376,762:1.9630820681385661,763:1.963077975150687,764:1.963073892894129,765:1.9630698213267435,766:1.9630657604066017,767:1.9630617100919938,768:1.9630576703414275,769:1.9630536411136277,770:1.9630496223675324,771:1.963045614062295,772:1.963041616157278,773:1.9630376286120574,774:1.9630336513864166,775:1.9630296844403485,776:1.9630257277340504,777:1.9630217812279265,778:1.9630178448825841,779:1.963013918658834,780:1.9630100025176869,781:1.9630060964203544,782:1.9630022003282468,783:1.9629983142029712,784:1.9629944380063318,785:1.962990571700327,786:1.9629867152471494,787:1.9629828686091835,788:1.9629790317490055,789:1.962975204629381,790:1.9629713872132657,791:1.9629675794638015,792:1.962963781344317,793:1.9629599928183272,794:1.9629562138495296,795:1.9629524444018054,796:1.9629486844392179,797:1.9629449339260105,798:1.9629411928266058,799:1.962937461105606,800:1.9629337387277892,801:1.9629300256581104,802:1.9629263218616995,803:1.9629226273038602,804:1.9629189419500692,805:1.9629152657659752,806:1.9629115987173975,807:1.9629079407703247,808:1.9629042918909145,809:1.9629006520454917,810:1.9628970212005485,811:1.9628933993227415,812:1.9628897863788926,813:1.9628861823359869,814:1.962882587161172,815:1.9628790008217571,816:1.9628754232852115,817:1.9628718545191641,818:1.9628682944914029,819:1.9628647431698727,820:1.9628612005226753,821:1.9628576665180681,822:1.9628541411244633,823:1.9628506243104265,824:1.962847116044676,825:1.962843616296083,826:1.9628401250336684,827:1.9628366422266041,828:1.9628331678442101,829:1.962829701855956,830:1.9628262442314577,831:1.9628227949404782,832:1.9628193539529253,833:1.962815921238852,834:1.9628124967684557,835:1.962809080512076,836:1.9628056724401943,837:1.962802272523434,838:1.9627988807325591,839:1.9627954970384724,840:1.9627921214122162,841:1.96278875382497,842:1.9627853942480507,843:1.9627820426529121,844:1.9627786990111424,845:1.9627753632944653,846:1.962772035474738,847:1.962768715523951,848:1.962765403414227,849:1.9627620991178198,850:1.9627588026071152,851:1.9627555138546275,852:1.9627522328330012,853:1.962748959515009,854:1.962745693873551,855:1.9627424358816548,856:1.9627391855124732,857:1.9627359427392859,858:1.9627327075354966,859:1.9627294798746329,860:1.9627262597303463,861:1.9627230470764099,862:1.962719841886719,863:1.962716644135291,864:1.9627134537962623,865:1.9627102708438906,866:1.9627070952525512,867:1.9627039269967388,868:1.9627007660510651,869:1.9626976123902597,870:1.9626944659891674,871:1.9626913268227497,872:1.9626881948660826,873:1.9626850700943568,874:1.9626819524828756,875:1.9626788420070573,876:1.962675738642431,877:1.9626726423646375,878:1.9626695531494305,879:1.962666470972672,880:1.9626633958103352,881:1.9626603276385024,882:1.962657266433364,883:1.962654212171219,884:1.962651164828473,885:1.962648124381639,886:1.962645090807336,887:1.9626420640822897,888:1.9626390441833281,889:1.9626360310873863,890:1.9626330247715016,891:1.962630025212815,892:1.962627032388571,893:1.9626240462761142,894:1.9626210668528927,895:1.9626180940964544,896:1.9626151279844477,897:1.9626121684946207,898:1.9626092156048216,899:1.9626062692929966,900:1.9626033295371899,901:1.9626003963155434,902:1.9625974696062964,903:1.9625945493877848,904:1.9625916356384394,905:1.9625887283367882,906:1.9625858274614525,907:1.962582932991149,908:1.9625800449046875,909:1.9625771631809725,910:1.962574287799,911:1.9625714187378587,912:1.9625685559767294,913:1.9625656994948841,914:1.9625628492716856,915:1.9625600052865868,916:1.9625571675191313,917:1.9625543359489512,918:1.9625515105557676,919:1.9625486913193901,920:1.9625458782197165,921:1.9625430712367309,922:1.962540270350506,923:1.9625374755412,924:1.962534686789057,925:1.962531904074407,926:1.9625291273776646,927:1.96252635667933,928:1.9625235919599864,929:1.962520833200302,930:1.9625180803810265,931:1.962515333482994,932:1.9625125924871198,933:1.9625098573744026,934:1.9625071281259212,935:1.962504404722836,936:1.9625016871463874,937:1.9624989753778976,938:1.9624962693987664,939:1.9624935691904748,940:1.9624908747345817,941:1.9624881860127243,942:1.9624855030066184,943:1.9624828256980582,944:1.962480154068913,945:1.962477488101131,946:1.962474827776736,947:1.9624721730778274,948:1.962469523986581,949:1.9624668804852476,950:1.9624642425561525,951:1.962461610181696,952:1.9624589833443515,953:1.9624563620266673,954:1.9624537462112641,955:1.9624511358808356,956:1.9624485310181483,957:1.9624459316060407,958:1.9624433376274224,959:1.9624407490652758,960:1.9624381659026522,961:1.9624355881226763,962:1.962433015708541,963:1.9624304486435091,964:1.9624278869109137,965:1.9624253304941575,966:1.9624227793767104,967:1.9624202335421121,968:1.9624176929739703,969:1.9624151576559599,970:1.962412627571823,971:1.9624101027053702,972:1.9624075830404768,973:1.9624050685610865,974:1.962402559251207,975:1.9624000550949139,976:1.9623975560763454,977:1.962395062179708,978:1.9623925733892695,979:1.9623900896893647,980:1.9623876110643914,981:1.9623851374988106,982:1.9623826689771475,983:1.96238020548399,984:1.9623777470039887,985:1.962375293521857,986:1.9623728450223694,987:1.9623704014903631,988:1.9623679629107367,989:1.9623655292684494,990:1.9623631005485223,991:1.9623606767360353,992:1.9623582578161303,993:1.9623558437740083,994:1.9623534345949294,995:1.9623510302642144,996:1.9623486307672415,997:1.9623462360894495,998:1.962343846216334,999:1.962341461133449,1e3:1.9623390808264078,1001:1.9623367052808791,1002:1.9623343344825908,1003:1.962331968417326,1004:1.9623296070709262,1005:1.9623272504292881,1006:1.9623248984783654,1007:1.9623225512041673,1008:1.9623202085927578,1009:1.9623178706302578,1010:1.9623155373028418,1011:1.9623132085967403,1012:1.962310884498237,1013:1.962308564993671,1014:1.962306250069434,1015:1.9623039397119733,1016:1.9623016339077874,1017:1.9622993326434304,1018:1.962297035905507,1019:1.9622947436806755,1020:1.9622924559556474,1021:1.962290172717185,1022:1.9622878939521027,1023:1.9622856196472673,1024:1.962283349789597,infinity:1.96}),emptyFunction=Object.freeze(()=>{}),createBenchEvent=(u,F)=>{let I=new globalThis.Event(u);return F&&Object.defineProperty(I,`task`,{configurable:!1,enumerable:!1,value:F,writable:!1}),I},createErrorEvent=(u,F)=>{let I=new globalThis.Event(`error`);return Object.defineProperty(I,`task`,{configurable:!1,enumerable:!1,value:u,writable:!1}),Object.defineProperty(I,`error`,{configurable:!1,enumerable:!1,value:F,writable:!1}),I};let JSRuntime=function(u){return u.browser=`browser`,u.bun=`bun`,u.deno=`deno`,u[`edge-light`]=`edge-light`,u.fastly=`fastly`,u.hermes=`hermes`,u.jsc=`jsc`,u.lagon=`lagon`,u.moddable=`moddable`,u.netlify=`netlify`,u.node=`node`,u[`quickjs-ng`]=`quickjs-ng`,u.spidermonkey=`spidermonkey`,u.v8=`v8`,u.workerd=`workerd`,u}({});const isBun=!!globalThis.Bun||!!globalThis.process?.versions?.bun,isDeno=!!globalThis.Deno,isNode=globalThis.process?.release?.name===`node`,isHermes=!!globalThis.HermesInternal,isWorkerd=globalThis.navigator?.userAgent===`Cloudflare-Workers`,isQuickJsNg=!!globalThis.navigator?.userAgent?.toLowerCase?.()?.includes?.(`quickjs-ng`),isNetlify=typeof globalThis.Netlify==`object`,isEdgeLight=typeof globalThis.EdgeRuntime==`string`,isLagon=!!globalThis.__lagon__,isFastly=!!globalThis.fastly,isModdable=!!globalThis.$262&&!!globalThis.lockdown&&!!globalThis.AsyncDisposableStack,isV8=!!globalThis.d8,isSpiderMonkey=!!globalThis.inIon&&!!globalThis.performance?.mozMemory,isJsc=!!globalThis.$&&`IsHTMLDDA`in globalThis.$,isBrowser=!!globalThis.window&&!!globalThis.navigator,runtime=(()=>isBun?JSRuntime.bun:isDeno?JSRuntime.deno:isNode?JSRuntime.node:isHermes?JSRuntime.hermes:isNetlify?JSRuntime.netlify:isEdgeLight?JSRuntime[`edge-light`]:isLagon?JSRuntime.lagon:isFastly?JSRuntime.fastly:isWorkerd?JSRuntime.workerd:isQuickJsNg?JSRuntime[`quickjs-ng`]:isModdable?JSRuntime.moddable:isV8?JSRuntime.v8:isSpiderMonkey?JSRuntime.spidermonkey:isJsc?JSRuntime.jsc:isBrowser?JSRuntime.browser:`unknown`)(),runtimeVersion=(()=>runtime===JSRuntime.bun?globalThis.Bun?.version:runtime===JSRuntime.deno?globalThis.Deno?.version?.deno:runtime===JSRuntime.node?globalThis.process?.versions?.node:runtime===JSRuntime.hermes?globalThis.HermesInternal?.getRuntimeProperties?.()?.[`OSS Release Version`]:runtime===JSRuntime.v8?globalThis.version?.():runtime===JSRuntime[`quickjs-ng`]?globalThis.navigator?.userAgent?.split?.(`/`)[1]:`unknown`)(),nToMs=u=>u/1e6,mToNs=u=>u*1e6,formatNumber=(u,F,I)=>{if(typeof u!=`number`)return String(u);if(u===1/0)return`+∞`;if(u===-1/0)return`-∞`;if(Number.isNaN(u))return`NaN`;let L=Math.abs(u);if(L>=10**F)return u.toFixed();if(L<10**(F-I))return u.toFixed(I);let R=L>=1?Math.floor(Math.log10(L))+1:0,z=Math.max(0,F-R);return z=Math.min(z,I),u.toFixed(z)};let hrtimeBigint;hrtimeBigint=typeof globalThis.process?.hrtime?.bigint==`function`?globalThis.process.hrtime.bigint.bind(process.hrtime):()=>{throw Error(`hrtime.bigint() is not supported in this JS environment`)};const hrtimeNow=()=>nToMs(Number(hrtimeBigint())),now=performance.now.bind(performance),isPromiseLike=u=>u!==null&&(typeof u==`object`||typeof u==`function`)&&typeof u.then==`function`,isAsyncFunction=u=>u?.constructor===(async()=>{}).constructor,isFnAsyncResource=u=>{if(u==null)return!1;if(isAsyncFunction(u))return!0;try{let F=u(),I=isPromiseLike(F);if(I)try{F.then(emptyFunction)?.catch(emptyFunction)}catch{}return I}catch{return!1}},average=u=>{if(u.length===0)throw Error(`samples must not be empty`);return u.reduce((u,F)=>u+F,0)/u.length||0},variance=(u,F=average(u))=>u.length<=1?0:u.reduce((u,I)=>u+(I-F)**2,0)/(u.length-1),quantileSorted=(u,F)=>{if(u.length===0)throw Error(`samples must not be empty`);if(F<0||F>1)throw Error(`q must be between 0 and 1`);if(F===0)return u[0];if(F===1)return u[u.length-1];let I=(u.length-1)*F,L=Math.floor(I);return u[L+1]==null?u[L]:u[L]+(I-L)*(u[L+1]-u[L])},medianSorted=u=>quantileSorted(u,.5),median=u=>medianSorted([...u].sort((u,F)=>u-F)),absoluteDeviation=(u,F,I=F(u))=>{let L=[];for(let F of u)L.push(Math.abs(F-I));return F(L)},getStatisticsSorted=u=>{let F=average(u),I=variance(u,F),L=Math.sqrt(I),z=L/Math.sqrt(u.length),B=u.length-1,V=tTable[(Math.round(B)||1).toString()]||tTable.infinity,H=z*V,U=Math.abs(F),W=U===0?1/0:H/U*100,G=medianSorted(u);return{aad:absoluteDeviation(u,average,F),critical:V,df:B,mad:absoluteDeviation(u,median,G),max:u[B],mean:F,min:u[0],moe:H,p50:G,p75:quantileSorted(u,.75),p99:quantileSorted(u,.99),p995:quantileSorted(u,.995),p999:quantileSorted(u,.999),rme:W,samples:u,sd:L,sem:z,variance:I}},invariant=(u,F)=>{if(!u)throw Error(F)};var Task=class extends EventTarget{constructor(u,F,I,L={}){super(),this.runs=0,this.bench=u,this.name=F,this.fn=I,this.fnOpts=L,this.async=isFnAsyncResource(I),this.signal=L.signal,this.signal&&this.signal.addEventListener(`abort`,()=>{this.dispatchEvent(createBenchEvent(`abort`,this)),this.bench.dispatchEvent(createBenchEvent(`abort`,this))},{once:!0})}addEventListener(u,F,I){super.addEventListener(u,F,I)}removeEventListener(u,F,I){super.removeEventListener(u,F,I)}reset(){this.dispatchEvent(createBenchEvent(`reset`,this)),this.runs=0,this.result=void 0}async run(){if(this.result?.error)return this;this.dispatchEvent(createBenchEvent(`start`,this)),await this.bench.opts.setup(this,`run`);let{error:u,samples:F}=await this.benchmark(`run`,this.bench.opts.time,this.bench.opts.iterations);return await this.bench.opts.teardown(this,`run`),this.processRunResult({error:u,latencySamples:F}),this}runSync(){if(this.result?.error)return this;invariant(this.bench.concurrency===null,"Cannot use `concurrency` option when using `runSync`"),this.dispatchEvent(createBenchEvent(`start`,this)),invariant(!isPromiseLike(this.bench.opts.setup(this,`run`)),"`setup` function must be sync when using `runSync()`");let{error:u,samples:F}=this.benchmarkSync(`run`,this.bench.opts.time,this.bench.opts.iterations);return invariant(!isPromiseLike(this.bench.opts.teardown(this,`run`)),"`teardown` function must be sync when using `runSync()`"),this.processRunResult({error:u,latencySamples:F}),this}async warmup(){if(this.result?.error)return;this.dispatchEvent(createBenchEvent(`warmup`,this)),await this.bench.opts.setup(this,`warmup`);let{error:u}=await this.benchmark(`warmup`,this.bench.opts.warmupTime,this.bench.opts.warmupIterations);await this.bench.opts.teardown(this,`warmup`),this.postWarmup(u)}warmupSync(){if(this.result?.error)return;this.dispatchEvent(createBenchEvent(`warmup`,this)),invariant(!isPromiseLike(this.bench.opts.setup(this,`warmup`)),"`setup` function must be sync when using `runSync()`");let{error:u}=this.benchmarkSync(`warmup`,this.bench.opts.warmupTime,this.bench.opts.warmupIterations);invariant(!isPromiseLike(this.bench.opts.teardown(this,`warmup`)),"`teardown` function must be sync when using `runSync()`"),this.postWarmup(u)}async benchmark(u,F,L){if(this.fnOpts.beforeAll!=null)try{await this.fnOpts.beforeAll.call(this,u)}catch(u){return{error:u}}let R=0,z=[],B=async()=>{if(!this.isAborted())try{this.fnOpts.beforeEach!=null&&await this.fnOpts.beforeEach.call(this,u);let F;this.async?{taskTime:F}=await this.measureOnce():{taskTime:F}=this.measureOnceSync(),z.push(F),R+=F}finally{this.fnOpts.afterEach!=null&&await this.fnOpts.afterEach.call(this,u)}};try{let u;this.bench.concurrency===`task`&&(u=pLimit(Math.max(1,Math.floor(this.bench.threshold))));let V=[];for(;(R<F||z.length+(u?.activeCount??0)+(u?.pendingCount??0)<L)&&!this.isAborted();)this.bench.concurrency===`task`?V.push(u(B)):await B();!this.isAborted()&&V.length>0?await Promise.all(V):V.length>0&&Promise.allSettled(V)}catch(u){return{error:u}}if(this.fnOpts.afterAll!=null)try{await this.fnOpts.afterAll.call(this,u)}catch(u){return{error:u}}return{samples:z}}benchmarkSync(u,F,I){if(this.fnOpts.beforeAll!=null)try{invariant(!isPromiseLike(this.fnOpts.beforeAll.call(this,u)),"`beforeAll` function must be sync when using `runSync()`")}catch(u){return{error:u}}let L=0,R=[],z=()=>{if(!this.isAborted())try{this.fnOpts.beforeEach!=null&&invariant(!isPromiseLike(this.fnOpts.beforeEach.call(this,u)),"`beforeEach` function must be sync when using `runSync()`");let{taskTime:F}=this.measureOnceSync();R.push(F),L+=F}finally{this.fnOpts.afterEach!=null&&invariant(!isPromiseLike(this.fnOpts.afterEach.call(this,u)),"`afterEach` function must be sync when using `runSync()`")}};try{for(;(L<F||R.length<I)&&!this.isAborted();)z()}catch(u){return{error:u}}if(this.fnOpts.afterAll!=null)try{invariant(!isPromiseLike(this.fnOpts.afterAll.call(this,u)),"`afterAll` function must be sync when using `runSync()`")}catch(u){return{error:u}}return{samples:R}}isAborted(){return this.signal?.aborted===!0||this.bench.opts.signal?.aborted===!0}async measureOnce(){let u=this.bench.opts.now(),F=await this.fn.call(this),I=this.bench.opts.now()-u,L=getOverriddenDurationFromFnResult(F);return L!=null&&(I=L),{fnResult:F,taskTime:I}}measureOnceSync(){let u=this.bench.opts.now(),F=this.fn.call(this),I=this.bench.opts.now()-u;invariant(!isPromiseLike(F),"task function must be sync when using `runSync()`");let L=getOverriddenDurationFromFnResult(F);return L!=null&&(I=L),{fnResult:F,taskTime:I}}mergeTaskResult(u){this.result=Object.freeze({...this.result,...u})}postWarmup(u){if(u&&(this.mergeTaskResult({error:u}),this.dispatchEvent(createErrorEvent(this,u)),this.bench.dispatchEvent(createErrorEvent(this,u)),this.bench.opts.throws))throw u}processRunResult({error:u,latencySamples:F}){let I=this.isAborted();if(F&&F.length>0){this.runs=F.length;let u=F.reduce((u,F)=>u+F,0),L=getStatisticsSorted(F.sort((u,F)=>u-F)),R=getStatisticsSorted(F.map(u=>u===0?L.mean===0?0:1e3/L.mean:1e3/u).sort((u,F)=>u-F));this.mergeTaskResult({aborted:I,critical:L.critical,df:L.df,hz:R.mean,latency:L,max:L.max,mean:L.mean,min:L.min,moe:L.moe,p75:L.p75,p99:L.p99,p995:L.p995,p999:L.p999,period:u/this.runs,rme:L.rme,runtime:this.bench.runtime,runtimeVersion:this.bench.runtimeVersion,samples:L.samples,sd:L.sd,sem:L.sem,throughput:R,totalTime:u,variance:L.variance})}else I&&this.mergeTaskResult({aborted:!0});if(u&&(this.mergeTaskResult({error:u}),this.dispatchEvent(createErrorEvent(this,u)),this.bench.dispatchEvent(createErrorEvent(this,u)),this.bench.opts.throws))throw u;this.dispatchEvent(createBenchEvent(`cycle`,this)),this.bench.dispatchEvent(createBenchEvent(`cycle`,this)),this.dispatchEvent(createBenchEvent(`complete`,this))}};function getOverriddenDurationFromFnResult(u){if(typeof u==`object`&&u&&`overriddenDuration`in u&&typeof u.overriddenDuration==`number`&&Number.isFinite(u.overriddenDuration)&&u.overriddenDuration>=0)return u.overriddenDuration}var Bench=class extends EventTarget{get results(){return[...this._tasks.values()].map(u=>u.result)}get tasks(){return[...this._tasks.values()]}constructor(u={}){super(),this.concurrency=null,this.threshold=1/0,this._tasks=new Map;let{name:F,...I}=u;this.name=F,this.runtime=runtime,this.runtimeVersion=runtimeVersion,this.opts={iterations:64,now,setup:emptyFunction,teardown:emptyFunction,throws:!1,time:1e3,warmup:!0,warmupIterations:16,warmupTime:250,...I},this.opts.signal&&this.opts.signal.addEventListener(`abort`,()=>{this.dispatchEvent(createBenchEvent(`abort`))},{once:!0})}add(u,F,I={}){if(this._tasks.has(u))throw Error(`Task "${u}" already exists`);{let L=new Task(this,u,F,I);this._tasks.set(u,L),this.dispatchEvent(createBenchEvent(`add`,L))}return this}addEventListener(u,F,I){super.addEventListener(u,F,I)}getTask(u){return this._tasks.get(u)}remove(u){let F=this.getTask(u);return F&&(this.dispatchEvent(createBenchEvent(`remove`,F)),this._tasks.delete(u)),this}removeEventListener(u,F,I){super.removeEventListener(u,F,I)}reset(){this.dispatchEvent(createBenchEvent(`reset`));for(let u of this._tasks.values())u.reset()}async run(){this.opts.warmup&&await this.warmupTasks();let u=[];if(this.dispatchEvent(createBenchEvent(`start`)),this.concurrency===`bench`)u=await this.mapTasksConcurrently(u=>u.run());else for(let F of this._tasks.values())u.push(await F.run());return this.dispatchEvent(createBenchEvent(`complete`)),u}runSync(){invariant(this.concurrency===null,"Cannot use `concurrency` option when using `runSync`"),this.opts.warmup&&this.warmupTasksSync();let u=[];this.dispatchEvent(createBenchEvent(`start`));for(let F of this._tasks.values())u.push(F.runSync());return this.dispatchEvent(createBenchEvent(`complete`)),u}table(u){return this.tasks.map(F=>{if(F.result){let{error:I,latency:L,throughput:R}=F.result;return I?{"Task name":F.name,Error:I.message,Stack:I.stack}:u?.(F)??{"Task name":F.name,"Latency avg (ns)":`${formatNumber(mToNs(L.mean),5,2)} \xb1 ${L.rme.toFixed(2)}%`,"Latency med (ns)":`${formatNumber(mToNs(L.p50),5,2)} \xb1 ${formatNumber(mToNs(L.mad),5,2)}`,"Throughput avg (ops/s)":`${Math.round(R.mean).toString()} \xb1 ${R.rme.toFixed(2)}%`,"Throughput med (ops/s)":`${Math.round(R.p50).toString()} \xb1 ${Math.round(R.mad).toString()}`,Samples:L.samples.length}}return null})}async mapTasksConcurrently(u){let F=pLimit(Math.max(1,Math.floor(this.threshold))),L=[];for(let I of this._tasks.values())L.push(F(()=>u(I)));return Promise.all(L)}async warmupTasks(){if(this.dispatchEvent(createBenchEvent(`warmup`)),this.concurrency===`bench`)await this.mapTasksConcurrently(u=>u.warmup());else for(let u of this._tasks.values())await u.warmup()}warmupTasksSync(){this.dispatchEvent(createBenchEvent(`warmup`));for(let u of this._tasks.values())u.warmupSync()}};export{Bench,Task,hrtimeNow,nToMs,now};
{
"name": "tinybench",
"version": "5.0.1",
"version": "5.1.0",
"description": "🔎 A simple, tiny and lightweight benchmarking library!",
"type": "module",
"volta": {
"node": "22.18.0",
"pnpm": "10.15.0"
"node": "22.21.0",
"pnpm": "10.18.3"
},

@@ -10,0 +10,0 @@ "engines": {

+101
-0

@@ -126,2 +126,103 @@ # Tinybench 🔎

## Aborting Benchmarks
Tinybench supports aborting benchmarks using `AbortSignal` at both the bench and task levels:
### Bench-level Abort
Abort all tasks in a benchmark by passing a signal to the `Bench` constructor:
```ts
const controller = new AbortController()
const bench = new Bench({ signal: controller.signal })
bench
.add('task1', () => {
// This will be aborted
})
.add('task2', () => {
// This will also be aborted
})
// Abort all tasks
controller.abort()
await bench.run()
// Both tasks will be aborted
```
### Task-level Abort
Abort individual tasks without affecting other tasks by passing a signal to the task options:
```ts
const controller = new AbortController()
const bench = new Bench()
bench
.add('abortable task', () => {
// This task can be aborted independently
}, { signal: controller.signal })
.add('normal task', () => {
// This task will continue normally
})
// Abort only the first task
controller.abort()
await bench.run()
// Only 'abortable task' will be aborted, 'normal task' continues
```
### Abort During Execution
You can abort benchmarks while they're running:
```ts
const controller = new AbortController()
const bench = new Bench({ time: 10000 }) // Long-running benchmark
bench.add('long task', async () => {
await new Promise(resolve => setTimeout(resolve, 100))
}, { signal: controller.signal })
// Abort after 1 second
setTimeout(() => controller.abort(), 1000)
await bench.run()
// Task will stop after ~1 second instead of running for 10 seconds
```
### Abort Events
Both `Bench` and `Task` emit `abort` events when aborted:
```ts
const controller = new AbortController()
const bench = new Bench()
bench.add('task', () => {
// Task function
}, { signal: controller.signal })
const task = bench.getTask('task')
// Listen for abort events
task.addEventListener('abort', () => {
console.log('Task aborted!')
})
bench.addEventListener('abort', () => {
console.log('Bench received abort event!')
})
controller.abort()
await bench.run()
```
**Note:** When a task is aborted, `task.result.aborted` will be `true`, and the task will have completed any iterations that were running when the abort signal was received.
## Prior art

@@ -128,0 +229,0 @@