UNPKG

tinybench

Version:

🔎 A simple, tiny and lightweight benchmarking library!

1 lines • 35.1 kB
const tTable=[1.96,12.706204736432102,4.3026527299112765,3.182446305284264,2.7764451051977996,2.57058183661474,2.446911848791681,2.3646242510102997,2.306004135033371,2.262157162740992,2.2281388519649385,2.200985160082949,2.178812829663418,2.160368656461013,2.1447866879169277,2.131449545559323,2.1199052992210112,2.109815577833181,2.10092204024096,2.0930240544082634,2.085963447265837,2.0796138447276626,2.073873067904015,2.068657610419041,2.063898561628021,2.0595385527532946,2.0555294386428713,2.0518305164802837,2.048407141795244,2.0452296421327034,2.042272456301238,2.0395134463964077,2.0369333434601016,2.0345152974493383,2.0322445093177186,2.030107928250343,2.0280940009804507,2.0261924630291097,2.0243941645751367,2.0226909117347285,2.021075382995338,2.019540963982894,2.0180816970958815,2.0166921941428138,2.0153675699129416,2.0141033848332928,2.012895595294589,2.011740510475755,2.010634754696446,2.0095752344892093,2.0085591097152062,2.0075837681558824,2.0066468031022118,2.00574599353695,2.0048792865665233,2.0040447818101814,2.003240717496698,2.002465458054599,2.0017174830120927,2.0009953770482105,2.000297821058262,1.9996235841149783,1.9989715162223116,1.998340541772196,1.9977296536259739,1.9971379077520126,1.9965644183594748,1.996008353475506,1.9954689309194023,1.994945414632814,1.9944371113297732,1.9939433674345044,1.9934635662785831,1.9929971255321668,1.9925434948468204,1.9921021536898658,1.9916726093523491,1.9912543951146042,1.9908470685550523,1.9904502099893606,1.9900634210283845,1.9896863232444832,1.989318556936819,1.9889597799871794,1.9886096667986737,1.988267907310378,1.9879342060816723,1.9876082814405773,1.987289864690939,1.9869786993737681,1.9866745405784685,1.9863771543000652,1.9860863168388938,1.985801814239503,1.9855234417658303,1.9852510034099267,1.9849843114317696,1.9847231859278835,1.9844674544266925,1.9842169515086832,1.983971518449634,1.9837310028852815,1.9834952584959407,1.9832641447097104,1.9830375264229902,1.9828152737371547,1.9825972617102912,1.9823833701230178,1.9821734832574516,1.9819674896884745,1.9817652820865104,1.981566757031071,1.9813718148344008,1.9811803593745805,1.9809922979375068,1.9808075410672004,1.980626002423938,1.9804475986497296,1.9802722492407063,1.9800998764260065,1.979930405052777,1.9797637624769306,1.9795998784593314,1.97943868506709,1.979280116579683,1.9791241093996175,1.9789706019673938,1.978819534680521,1.9786708498163625,1.9785244914586055,1.9783804054271532,1.9782385392112587,1.9780988419057237,1.977961264150002,1.9778257580700531,1.9776922772228045,1.9775607765430836,1.977431212292894,1.9773035420129166,1.9771777244761224,1.9770537196433886,1.9769314886210223,1.97681099362009,1.9766921979174685,1.9765750658185368,1.9764595626214163,1.9763456545827007,1.9762333088845883,1.9761224936033637,1.9760131776791554,1.9759053308869141,1.9757989238085507,1.975693927806187,1.9755903149964589,1.9754880582258323,1.9753871310468787,1.9752875076954728,1.9751891630688665,1.9750920727046015,1.9749962127602256,1.9749015599937723,1.9748080917449764,1.9747157859171882,1.9746246209599583,1.9745345758522659,1.9744456300863593,1.9743577636521858,1.9742709570223849,1.974185191137821,1.9741004473936339,1.9740167076257829,1.9739339540980692,1.9738521694896138,1.9737713368827694,1.9736914397514562,1.9736124619498976,1.9735343877017435,1.9734572015895646,1.9733808885447033,1.9733054338374667,1.973230823067649,1.9731570421553692,1.9730840773322162,1.9730119151326795,1.9729405423858692,1.9728699462074992,1.9728001139921352,1.9727310334056907,1.9726626923781656,1.9725950790966158,1.9725281819983451,1.972461989764315,1.9723964913127596,1.9723316757930012,1.9722675325794565,1.972204051265833,1.9721412216594971,1.9720790337760221,1.972017477833896,1.9719565442493954,1.9718962236316093,1.9718365067776158,1.971777384667801,1.971718848461318,1.9716608894916787,1.971603499262479,1.9715466694432433,1.9714903918653972,1.9714346585183509,1.9713794615456992,1.9713247932415296,1.9712706460468354,1.9712170125460335,1.9711638854635767,1.971111257660664,1.9710591221320446,1.9710074720029072,1.97095630052586,1.9709056010779908,1.9708553671580111,1.9708055923834753,1.970756270488079,1.9707073953190282,1.9706589608344816,1.9706109611010594,1.9705633902914228,1.9705162426819125,1.9704695126502556,1.9704231946733297,1.9703772833249869,1.9703317732739336,1.9702866592816697,1.9702419362004757,1.9701975989714555,1.9701536426226303,1.9701100622670775,1.9700668531011214,1.9700240104025675,1.9699815295289818,1.969939405916016,1.9698976350757686,1.9698562125951948,1.9698151341345516,1.9697743954258797,1.9697339922715287,1.9696939205427133,1.9696541761781068,1.9696147551824699,1.9695756536253115,1.9695368676395828,1.9694983934204007,1.9694602272238055,1.9694223653655467,1.969384804219895,1.9693475402184863,1.9693105698491933,1.9692738896550193,1.9692374962330224,1.9692013862332616,1.9691655563577715,1.9691300033595551,1.9690947240416052,1.9690597152559448,1.9690249739026924,1.9689904969291443,1.968956281328883,1.9689223241409022,1.9688886224487527,1.9688551733797075,1.968821974103945,1.9687890218337525,1.968756313822743,1.968723847365097,1.9686916197948103,1.9686596284849691,1.9686278708470335,1.9685963443301415,1.968565046420423,1.9685339746403347,1.9685031265480044,1.9684724997365923,1.968442091833664,1.968411900500579,1.9683819234318907,1.9683521583547587,1.9683226030283762,1.9682932552434063,1.968264112821431,1.9682351736144144,1.9682064355041722,1.968177896401857,1.968149554247451,1.9681214070092705,1.9680934526834821,1.9680656892936232,1.968038114890141,1.9680107275499321,1.9679835253758984,1.967956506496507,1.9679296690653623,1.9679030112607847,1.9678765312853979,1.967850227365727,1.9678240977517998,1.967798140716761,1.9677723545564905,1.967746737589231,1.9677212881552217,1.967696004616341,1.967670885355754,1.9676459287775685,1.9676211333064957,1.9675964973875213,1.967572019485578,1.967547698085227,1.9675235316903468,1.9674995188238256,1.9674756580272583,1.9674519478606556,1.96742838690215,1.9674049737477135,1.9673817070108799,1.9673585853224684,1.9673356073303163,1.9673127716990173,1.9672900771096589,1.9672675222595717,1.9672451058620788,1.9672228266462515,1.9672006833566689,1.9671786747531816,1.9671567996106818,1.967135056718874,1.9671134448820529,1.9670919629188843,1.9670706096621893,1.967049383958733,1.9670282846690177,1.9670073106670771,1.9669864608402783,1.966965734089124,1.9669451293270586,1.9669246454802793,1.9669042814875488,1.9668840363000124,1.966863908881019,1.9668438982059417,1.966824003262006,1.9668042230481186,1.9667845565746986,1.9667650028635129,1.9667455609475144,1.9667262298706825,1.966707008687866,1.9666878964646288,1.9666688922770996,1.9666499952118222,1.9666312043656085,1.9666125188453965,1.9665939377681074,1.9665754602605063,1.9665570854590666,1.9665388125098342,1.966520640568296,1.9665025687992495,1.966484596376675,1.9664667224836099,1.9664489463120245,1.9664312670626998,1.9664136839451096,1.9663961961773,1.966378802985776,1.9663615036053859,1.9663442972792093,1.9663271832584475,1.9663101608023135,1.966293229177927,1.9662763876602067,1.96625963553177,1.9662429720828285,1.9662263966110878,1.9662099084216513,1.9661935068269203,1.9661771911465,1.9661609607071053,1.9661448148424667,1.9661287528932416,1.9661127742069229,1.9660968781377508,1.966081064046626,1.966065331301024,1.966049679274911,1.9660341073486605,1.9660186149089722,1.9660032013487905,1.9659878660672256,1.9659726084694753,1.9659574279667498,1.965942323976193,1.9659272959208094,1.9659123432293915,1.9658974653364458,1.9658826616821223,1.965867931712145,1.9658532748777406,1.9658386906355727,1.9658241784476738,1.965809737781378,1.9657953681092573,1.9657810689090576,1.9657668396636336,1.965752679860889,1.9657385889937122,1.9657245665599175,1.9657106120621863,1.9656967250080057,1.9656829049096134,1.9656691512839384,1.965655463652545,1.9656418415415793,1.9656282844817121,1.9656147920080864,1.9656013636602634,1.9655879989821707,1.9655746975220507,1.9655614588324102,1.965548282469968,1.9655351679956077,1.9655221149743287,1.9655091229751978,1.9654961915712998,1.9654833203396942,1.9654705088613673,1.9654577567211857,1.965445063507854,1.965432428813868,1.9654198522354724,1.9654073333726187,1.9653948718289207,1.9653824672116142,1.9653701191315152,1.9653578272029781,1.9653455910438589,1.9653334102754718,1.9653212845225516,1.9653092134132164,1.9652971965789277,1.9652852336544535,1.9652733242778317,1.9652614680903338,1.9652496647364275,1.9652379138637432,1.9652262151230366,1.9652145681681563,1.9652029726560083,1.9651914282465226,1.9651799346026202,1.9651684913901803,1.9651570982780076,1.9651457549378,1.9651344610441186,1.9651232162743548,1.9651120203087005,1.9651008728301178,1.9650897735243085,1.9650787220796855,1.9650677181873428,1.965056761541027,1.965045851837109,1.965034988774555,1.965024172054902,1.9650134013822251,1.9650026764631154,1.9649919970066518,1.9649813627243728,1.964970773330254,1.9649602285406784,1.9649497280744153,1.9649392716525922,1.964928858998672,1.9649184898384262,1.9649081638999137,1.9648978809134563,1.9648876406116125,1.9648774427291587,1.9648672870030628,1.9648571731724636,1.9648471009786466,1.9648370701650248,1.9648270804771135,1.9648171316625118,1.964807223470879,1.9647973556539153,1.9647875279653397,1.9647777401608706,1.9647679919982053,1.9647582832369994,1.9647486136388483,1.9647389829672652,1.9647293909876653,1.9647198374673442,1.9647103221754598,1.964700844883014,1.9646914053628335,1.9646820033895525,1.964672638739595,1.9646633111911553,1.9646540205241838,1.9646447665203655,1.964635548963106,1.9646263676375137,1.9646172223303833,1.9646081128301776,1.9645990389270147,1.9645900004126484,1.9645809970804544,1.9645720287254127,1.9645630951440949,1.964554196134645,1.9645453314967691,1.9645365010317148,1.9645277045422602,1.9645189418326983,1.964510212708822,1.964501516977911,1.964492854448715,1.9644842249314425,1.9644756282377454,1.9644670641807058,1.964458532574823,1.9644500332359982,1.9644415659815229,1.9644331306300662,1.9644247270016604,1.964416354917689,1.9644080142008735,1.9643997046752626,1.9643914261662165,1.9643831785003991,1.9643749615057613,1.9643667750115323,1.964358618848207,1.9643504928475335,1.964342396842502,1.9643343306673333,1.9643262941574684,1.9643182871495555,1.9643103094814403,1.964302360992155,1.9642944415219068,1.9642865509120675,1.9642786890051633,1.964270855644863,1.9642630506759702,1.9642552739444101,1.9642475252972216,1.9642398045825453,1.9642321116496164,1.9642244463487513,1.9642168085313412,1.9642091980498402,1.9642016147577568,1.964194058509645,1.9641865291610932,1.9641790265687171,1.964171550590149,1.9641641010840303,1.9641566779100006,1.9641492809286911,1.964141910001714,1.964134564991655,1.9641272457620647,1.9641199521774493,1.964112684103263,1.9641054414058998,1.9640982239526847,1.964091031611867,1.9640838642526093,1.964076721744983,1.9640696039599586,1.9640625107693983,1.9640554420460483,1.9640483976635308,1.9640413774963374,1.964034381419821,1.9640274093101877,1.9640204610444916,1.9640135365006257,1.9640066355573154,1.9639997580941106,1.963992903991381,1.9639860731303063,1.9639792653928712,1.9639724806618581,1.9639657188208401,1.9639589797541745,1.963952263346997,1.963945569485213,1.963938898055494,1.9639322489452695,1.96392562204272,1.9639190172367733,1.963912434417095,1.963905873474085,1.9638993342988706,1.9638928167832999,1.9638863208199362,1.9638798463020526,1.9638733931236256,1.9638669611793291,1.9638605503645292,1.9638541605752786,1.9638477917083106,1.963841443661033,1.9638351163315244,1.9638288096185263,1.9638225234214404,1.9638162576403206,1.96381001217587,1.9638037869294331,1.9637975818029945,1.9637913966991682,1.9637852315211985,1.9637790861729507,1.963772960558908,1.9637668545841658,1.9637607681544267,1.963754701175997,1.96374865355578,1.9637426252012729,1.9637366160205605,1.9637306259223126,1.9637246548157765,1.9637187026107747,1.9637127692177012,1.9637068545475131,1.9637009585117295,1.9636950810224274,1.9636892219922344,1.9636833813343266,1.963677558962424,1.9636717547907854,1.9636659687342057,1.96366020070801,1.9636544506280507,1.9636487184107032,1.9636430039728607,1.963637307231933,1.9636316281058388,1.9636259665130043,1.9636203223723585,1.9636146956033296,1.9636090861258415,1.9636034938603082,1.963597918727633,1.9635923606492014,1.9635868195468806,1.9635812953430134,1.9635757879604159,1.9635702973223736,1.9635648233526377,1.9635593659754214,1.9635539251153973,1.9635485006976923,1.9635430926478856,1.9635377008920054,1.9635323253565247,1.9635269659683576,1.9635216226548569,1.963516295343811,1.9635109839634397,1.9635056884423918,1.9635004087097414,1.9634951446949849,1.9634898963280374,1.9634846635392311,1.9634794462593101,1.9634742444194289,1.9634690579511493,1.9634638867864362,1.9634587308576554,1.9634535900975714,1.9634484644393435,1.9634433538165224,1.963438258163049,1.96343317741325,1.963428111501836,1.9634230603638985,1.9634180239349066,1.9634130021507055,1.9634079949475116,1.9634030022619122,1.9633980240308617,1.9633930601916791,1.963388110682045,1.9633831754399986,1.963378254403937,1.9633733475126116,1.9633684547051236,1.9633635759209254,1.9633587110998145,1.9633538601819331,1.9633490231077657,1.9633441998181338,1.9633393902541987,1.9633345943574538,1.9633298120697256,1.96332504333317,1.9633202880902698,1.9633155462838343,1.963310817856994,1.9633061027532,1.9633014009162226,1.9632967122901475,1.9632920368193745,1.963287374448614,1.9632827251228866,1.9632780887875207,1.9632734653881478,1.963268854870705,1.963264257181428,1.9632596722668525,1.9632551000738105,1.9632505405494287,1.963245993641126,1.963241459296613,1.9632369374638876,1.963232428091235,1.9632279311272245,1.963223446520709,1.9632189742208208,1.963214514176972,1.9632100663388516,1.9632056306564227,1.9632012070799227,1.9631967955598593,1.9631923960470097,1.9631880084924196,1.9631836328473993,1.9631792690635235,1.9631749170926298,1.9631705768868148,1.9631662483984351,1.9631619315801037,1.9631576263846882,1.9631533327653103,1.9631490506753435,1.963144780068411,1.963140520898385,1.9631362731193833,1.9631320366857699,1.9631278115521522,1.9631235976733785,1.9631193950045382,1.963115203500959,1.963111023118206,1.9631068538120793,1.963102695538613,1.963098548254074,1.963094411914959,1.963090286477995,1.9630861719001376,1.9630820681385661,1.963077975150687,1.963073892894129,1.9630698213267435,1.9630657604066017,1.9630617100919938,1.9630576703414275,1.9630536411136277,1.9630496223675324,1.963045614062295,1.963041616157278,1.9630376286120574,1.9630336513864166,1.9630296844403485,1.9630257277340504,1.9630217812279265,1.9630178448825841,1.963013918658834,1.9630100025176869,1.9630060964203544,1.9630022003282468,1.9629983142029712,1.9629944380063318,1.962990571700327,1.9629867152471494,1.9629828686091835,1.9629790317490055,1.962975204629381,1.9629713872132657,1.9629675794638015,1.962963781344317,1.9629599928183272,1.9629562138495296,1.9629524444018054,1.9629486844392179,1.9629449339260105,1.9629411928266058,1.962937461105606,1.9629337387277892,1.9629300256581104,1.9629263218616995,1.9629226273038602,1.9629189419500692,1.9629152657659752,1.9629115987173975,1.9629079407703247,1.9629042918909145,1.9629006520454917,1.9628970212005485,1.9628933993227415,1.9628897863788926,1.9628861823359869,1.962882587161172,1.9628790008217571,1.9628754232852115,1.9628718545191641,1.9628682944914029,1.9628647431698727,1.9628612005226753,1.9628576665180681,1.9628541411244633,1.9628506243104265,1.962847116044676,1.962843616296083,1.9628401250336684,1.9628366422266041,1.9628331678442101,1.962829701855956,1.9628262442314577,1.9628227949404782,1.9628193539529253,1.962815921238852,1.9628124967684557,1.962809080512076,1.9628056724401943,1.962802272523434,1.9627988807325591,1.9627954970384724,1.9627921214122162,1.96278875382497,1.9627853942480507,1.9627820426529121,1.9627786990111424,1.9627753632944653,1.962772035474738,1.962768715523951,1.962765403414227,1.9627620991178198,1.9627588026071152,1.9627555138546275,1.9627522328330012,1.962748959515009,1.962745693873551,1.9627424358816548,1.9627391855124732,1.9627359427392859,1.9627327075354966,1.9627294798746329,1.9627262597303463,1.9627230470764099,1.962719841886719,1.962716644135291,1.9627134537962623,1.9627102708438906,1.9627070952525512,1.9627039269967388,1.9627007660510651,1.9626976123902597,1.9626944659891674,1.9626913268227497,1.9626881948660826,1.9626850700943568,1.9626819524828756,1.9626788420070573,1.962675738642431,1.9626726423646375,1.9626695531494305,1.962666470972672,1.9626633958103352,1.9626603276385024,1.962657266433364,1.962654212171219,1.962651164828473,1.962648124381639,1.962645090807336,1.9626420640822897,1.9626390441833281,1.9626360310873863,1.9626330247715016,1.962630025212815,1.962627032388571,1.9626240462761142,1.9626210668528927,1.9626180940964544,1.9626151279844477,1.9626121684946207,1.9626092156048216,1.9626062692929966,1.9626033295371899,1.9626003963155434,1.9625974696062964,1.9625945493877848,1.9625916356384394,1.9625887283367882,1.9625858274614525,1.962582932991149,1.9625800449046875,1.9625771631809725,1.962574287799,1.9625714187378587,1.9625685559767294,1.9625656994948841,1.9625628492716856,1.9625600052865868,1.9625571675191313,1.9625543359489512,1.9625515105557676,1.9625486913193901,1.9625458782197165,1.9625430712367309,1.962540270350506,1.9625374755412,1.962534686789057,1.962531904074407,1.9625291273776646,1.96252635667933,1.9625235919599864,1.962520833200302,1.9625180803810265,1.962515333482994,1.9625125924871198,1.9625098573744026,1.9625071281259212,1.962504404722836,1.9625016871463874,1.9624989753778976,1.9624962693987664,1.9624935691904748,1.9624908747345817,1.9624881860127243,1.9624855030066184,1.9624828256980582,1.962480154068913,1.962477488101131,1.962474827776736,1.9624721730778274,1.962469523986581,1.9624668804852476,1.9624642425561525,1.962461610181696,1.9624589833443515,1.9624563620266673,1.9624537462112641,1.9624511358808356,1.9624485310181483,1.9624459316060407,1.9624433376274224,1.9624407490652758,1.9624381659026522,1.9624355881226763,1.962433015708541,1.9624304486435091,1.9624278869109137,1.9624253304941575,1.9624227793767104,1.9624202335421121,1.9624176929739703,1.9624151576559599,1.962412627571823,1.9624101027053702,1.9624075830404768,1.9624050685610865,1.962402559251207,1.9624000550949139,1.9623975560763454,1.962395062179708,1.9623925733892695,1.9623900896893647,1.9623876110643914,1.9623851374988106,1.9623826689771475,1.96238020548399,1.9623777470039887,1.962375293521857,1.9623728450223694,1.9623704014903631,1.9623679629107367,1.9623655292684494,1.9623631005485223,1.9623606767360353,1.9623582578161303,1.9623558437740083,1.9623534345949294,1.9623510302642144,1.9623486307672415,1.9623462360894495,1.962343846216334,1.962341461133449,1.9623390808264078,1.9623367052808791,1.9623343344825908,1.962331968417326,1.9623296070709262,1.9623272504292881,1.9623248984783654,1.9623225512041673,1.9623202085927578,1.9623178706302578,1.9623155373028418,1.9623132085967403,1.962310884498237,1.962308564993671,1.962306250069434,1.9623039397119733,1.9623016339077874,1.9622993326434304,1.962297035905507,1.9622947436806755,1.9622924559556474,1.962290172717185,1.9622878939521027,1.9622856196472673,1.962283349789597],emptyFunction=Object.freeze(()=>{});var BenchEvent=class extends globalThis.Event{get error(){return this.#e}get task(){return this.#t}#e;#t;constructor(i,D,O){super(i),this.#t=D,this.#e=O}};function detectRuntime(i=globalThis){let D=`unknown`,O=`unknown`;return i.Bun||i.process&&i.process.versions?.bun?(D=`bun`,O=i.Bun.version||`unknown`):i.Deno?(D=`deno`,O=i.Deno.version?.deno??`unknown`):i.process&&i.process.release?.name===`node`?(D=`node`,O=i.process.versions?.node??`unknown`):i.HermesInternal?(D=`hermes`,O=i.HermesInternal.getRuntimeProperties?.()[`OSS Release Version`]??`unknown`):hasNavigatorWithUserAgent(i)&&i.navigator.userAgent===`Cloudflare-Workers`?D=`workerd`:hasNavigatorWithUserAgent(i)&&i.navigator.userAgent.toLowerCase().startsWith(`quickjs-ng`)?(D=`quickjs-ng`,O=i.navigator.userAgent.split(`/`)[1]??`unknown`):typeof i.Netlify==`object`?D=`netlify`:typeof i.EdgeRuntime==`string`?D=`edge-light`:i.__lagon__?D=`lagon`:i.fastly?D=`fastly`:i.$262&&i.lockdown&&i.AsyncDisposableStack?D=`moddable`:i.d8?(D=`v8`,O=typeof i.version==`function`?i.version():`unknown`):i.inIon&&i.performance&&i.performance.mozMemory?D=`spidermonkey`:typeof i.$==`object`&&i.$!==null&&`IsHTMLDDA`in i.$?D=`jsc`:i.window&&i.navigator&&(D=`browser`),{runtime:D,version:O}}function hasNavigatorWithUserAgent(i=globalThis){return typeof i.navigator==`object`&&i.navigator!==null&&typeof i.navigator.userAgent==`string`}const{runtime,version:runtimeVersion}=detectRuntime(),nToMs=i=>Number(i)/1e6,mToNs=i=>Number(i)*1e6,mToMs=i=>i,nBigintToMs=i=>Number(i)/1e6,mToNsBigint=i=>BigInt(i)*1000000n,formatNumber=(i,D=5,O=2)=>{if(i===1/0)return`+∞`;if(i===-1/0)return`-∞`;if(i!==i)return`NaN`;let k=Math.abs(i);if(k>=10**D)return i.toFixed();if(k<10**(D-O))return i.toFixed(O);let A=Math.min(Math.max(0,D-(Math.floor(Math.log10(k))+1)),O);return i.toFixed(A)},isPromiseLike=i=>i!==null&&(typeof i==`object`||typeof i==`function`)&&typeof i.then==`function`,AsyncFunctionConstructor=(async()=>{}).constructor,isAsyncFunction=i=>typeof i==`function`&&i.constructor===AsyncFunctionConstructor,isFnAsyncResource=i=>{if(i==null)return!1;if(isAsyncFunction(i))return!0;try{let O=i(),k=isPromiseLike(O);if(k)try{O.then(emptyFunction).catch(emptyFunction)}catch{}return k}catch{return!1}},isValidSamples=i=>Array.isArray(i)&&i.length!==0;function sortSamples(i){i.sort(sortFn)}const meanAndVariance=i=>{let D=i.length;if(D===1)return{mean:i[0],vr:0};let O=0,k=0,A=0,j=0,M=0;for(;M<D;)A=i[M++],j=A-O,O+=j/M,k+=j*(A-O);return{mean:O,vr:k/(D-1)}},quantileSorted=(i,D)=>{let O=(i.length-1)*D,k=Math.floor(O);return k+1<i.length?i[k]+(O-k)*(i[k+1]-i[k]):i[k]},sortFn=(i,D)=>i-D,absoluteDeviationMean=(i,D)=>{let O=0,k=i.length,A=0;for(;A<k;)O+=(Math.abs(i[A++]-D)-O)/A;return O};function absoluteDeviationMedian(i,D){let O=i.length;if(O===1)return 0;let k=O>>1,A=O+1>>1,j=0,M=k,N,P,F,I,L,R;for(;j<=M;){if(N=j+M>>1,P=A-N,F=N===0?-1/0:D-i[k-N],L=N===k?1/0:D-i[k-N-1],I=P===0?-1/0:i[k+P-1]-D,R=P===O-k?1/0:i[k+P]-D,F<=R&&I<=L)return O&1?Math.max(F,I):(Math.max(F,I)+Math.min(L,R))/2;F>R?M=N-1:j=N+1}return 0}function computeStatistics(D,O=!1){let{mean:k,vr:A}=meanAndVariance(D),j=Math.sqrt(A),M=j/Math.sqrt(D.length),N=D.length-1,P=tTable[N||1]??tTable[0],F=M*P,I=k===0?1/0:F/Math.abs(k)*100,L=quantileSorted(D,.5);return{aad:absoluteDeviationMean(D,k),critical:P,df:N,mad:absoluteDeviationMedian(D,L),max:D[N],mean:k,min:D[0],moe:F,p50:L,p75:quantileSorted(D,.75),p99:quantileSorted(D,.99),p995:quantileSorted(D,.995),p999:quantileSorted(D,.999),rme:I,samples:O?D:void 0,samplesCount:D.length,sd:j,sem:M,variance:A}}const assert=(i,D)=>{if(!i){let i=Error.stackTraceLimit;try{Error.stackTraceLimit=0;let O=Error(D);throw Error.stackTraceLimit=i,i!==0&&Error.captureStackTrace(O,assert),O}finally{Error.stackTraceLimit=i}}},toError=i=>{switch(typeof i){case`function`:return Error(i.name);case`object`:if(i!==null)return i instanceof Error?i:Error(i.message??``);case`undefined`:return Error();case`string`:return Error(i);default:return Error(String(i))}},defaultConvertTaskResultForConsoleTable=i=>{let D=i.result.state;return{"Task name":i.name,...D===`aborted-with-statistics`||D===`completed`?{"Latency avg (ns)":`${formatNumber(mToNs(i.result.latency.mean))} \xb1 ${i.result.latency.rme.toFixed(2)}%`,"Latency med (ns)":`${formatNumber(mToNs(i.result.latency.p50))} \xb1 ${formatNumber(mToNs(i.result.latency.mad))}`,"Throughput avg (ops/s)":`${Math.round(i.result.throughput.mean).toString()} \xb1 ${i.result.throughput.rme.toFixed(2)}%`,"Throughput med (ops/s)":`${Math.round(i.result.throughput.p50).toString()} \xb1 ${Math.round(i.result.throughput.mad).toString()}`,Samples:i.result.latency.samplesCount}:D===`errored`?{Error:i.result.error.message,Stack:i.result.error.stack??`N/A`}:{"Latency avg (ns)":`N/A`,"Latency med (ns)":`N/A`,"Throughput avg (ops/s)":`N/A`,"Throughput med (ops/s)":`N/A`,Samples:`N/A`,Remarks:D},...D===`aborted-with-statistics`&&{Remarks:D}}},withConcurrency=async i=>{let{fn:D,iterations:O,limit:k,signal:A,time:j=0,timestampProvider:M=performanceNowTimestampProvider}=i,N=O===0?k:Math.max(0,Math.min(k,O)),P=[],F=[],I=!0,L=0,R=Number.isFinite(j)&&j>0,z=O>0,B=0,V=M.fn,H=z?R?()=>I&&L++<O&&(V()<B||(I=!1)):()=>I&&L++<O:R?()=>I&&(V()<B||(I=!1)):()=>I,U=i=>{I&&F.push(i)},W=i=>{P.push(toError(i))},G=()=>I=!1;if(A){if(A.aborted)return[];A.addEventListener(`abort`,G)}let K=async()=>{for(;H();)try{U(await D())}catch(i){I=!1,W(i);break}};R&&(B=V()+M.fromMs(j));let q=Array.from({length:N},()=>K());if(await Promise.allSettled(q),P.length===0)return F;throw P.length===1?P[0]:AggregateError(P,`Multiple errors occurred during concurrent execution`)},performanceNow=globalThis.performance.now.bind(globalThis.performance),performanceNowTimestampProvider={fn:performanceNow,fromMs:mToMs,name:`performanceNow`,toMs:mToMs},hrtimeBigint=globalThis.process?.hrtime?.bigint.bind(globalThis.process?.hrtime)??(()=>{throw Error(`hrtime.bigint() is not supported in this JS environment`)}),hrtimeNow=()=>nToMs(Number(hrtimeBigint())),hrtimeNowTimestampProvider={fn:hrtimeBigint,fromMs:mToNsBigint,name:`hrtimeNow`,toMs:nBigintToMs},bunNanoseconds=globalThis.Bun?.nanoseconds,bunNanosecondsTimestampProvider=bunNanoseconds?{fn:bunNanoseconds,fromMs:mToNs,name:`bunNanoseconds`,toMs:nToMs}:void 0;function createCustomTimestampProvider(i){return{fn:i,fromMs:mToMs,name:`custom`,toMs:mToMs}}const getTimestampProviderByJSRuntime=(i=runtime)=>i===`bun`?bunNanosecondsTimestampProvider:i===`deno`?performanceNowTimestampProvider:i===`node`?hrtimeNowTimestampProvider:performanceNowTimestampProvider,getTimestampProvider=i=>{switch(typeof i){case`function`:return createCustomTimestampProvider(i);case`string`:switch(i){case`auto`:return getTimestampProviderByJSRuntime();case`bunNanoseconds`:return bunNanosecondsTimestampProvider??performanceNowTimestampProvider;case`hrtimeNow`:return hrtimeNowTimestampProvider;default:return performanceNowTimestampProvider}case`object`:return i===null?performanceNowTimestampProvider:(assert(isValidTimestampProvider(i),`Invalid Timestamp Provider object`),i);case`undefined`:return performanceNowTimestampProvider;default:throw Error(`Invalid value for 'timestampProvider' or 'now'`)}};function isValidTimestampProvider(i){return typeof i==`object`&&!!i&&typeof i.fn==`function`&&typeof i.name==`string`&&typeof i.toMs==`function`&&typeof i.fromMs==`function`}const hookNames=[`afterAll`,`beforeAll`,`beforeEach`,`afterEach`],abortableStates=[`not-started`,`started`],notStartedTaskResult={state:`not-started`},abortedTaskResult={state:`aborted`},startedTaskResult={state:`started`};var Task=class extends EventTarget{get name(){return this.#a}get result(){return{...this.#o,runtime:this.#n.runtime,runtimeVersion:this.#n.runtimeVersion,timestampProviderName:this.#n.timestampProvider.name}}get runs(){return this.#c}#e=!1;#t;#n;#r;#i;#a;#o=notStartedTaskResult;#s;#c=0;#l;#u;#d;#f;constructor(i,D,O,k={}){super(),this.#n=i,this.#a=D,this.#r=O,this.#i=k,this.#t=k.async??isFnAsyncResource(O),this.#l=k.signal,this.#s=k.retainSamples??i.retainSamples,this.#d=i.timestampProvider,this.#u=i.timestampProvider.fn,this.#f=i.timestampProvider.toMs;for(let i of hookNames)this.#i[i]!=null&&assert(typeof this.#i[i]==`function`,`'${i}' must be a function if provided`);this.reset(!1),this.#l&&(this.#l.aborted?this.#_():this.#l.addEventListener(`abort`,this.#_.bind(this),{once:!0})),this.#n.signal&&(this.#n.signal.aborted?this.#_():this.#n.signal.addEventListener(`abort`,this.#_.bind(this),{once:!0}))}reset(i=!0){this.#c=0,this.#o=this.#e?abortedTaskResult:notStartedTaskResult,i&&this.dispatchEvent(new BenchEvent(`reset`,this))}async run(){if(this.#o.state!==`not-started`)return this;this.#o={state:`started`},this.dispatchEvent(new BenchEvent(`start`,this)),await this.#n.setup(this,`run`);let{error:i,samples:D}=await this.#p(`run`,this.#n.time,this.#n.iterations);return await this.#n.teardown(this,`run`),this.#y({error:i,latencySamples:D}),this}runSync(){if(this.#o.state!==`not-started`)return this;assert(this.#n.concurrency===null,"Cannot use `concurrency` option when using `runSync`"),this.#o=startedTaskResult,this.dispatchEvent(new BenchEvent(`start`,this)),assert(!isPromiseLike(this.#n.setup(this,`run`)),"`setup` function must be sync when using `runSync()`");let{error:i,samples:D}=this.#m(`run`,this.#n.time,this.#n.iterations);return assert(!isPromiseLike(this.#n.teardown(this,`run`)),"`teardown` function must be sync when using `runSync()`"),this.#y({error:i,latencySamples:D}),this}async warmup(){if(this.#o.state!==`not-started`)return;this.dispatchEvent(new BenchEvent(`warmup`,this)),await this.#n.setup(this,`warmup`);let{error:i}=await this.#p(`warmup`,this.#n.warmupTime,this.#n.warmupIterations);await this.#n.teardown(this,`warmup`),this.#v(i)}warmupSync(){if(this.#o.state!==`not-started`)return;this.dispatchEvent(new BenchEvent(`warmup`,this)),assert(!isPromiseLike(this.#n.setup(this,`warmup`)),"`setup` function must be sync when using `runSync()`");let{error:i}=this.#m(`warmup`,this.#n.warmupTime,this.#n.warmupIterations);assert(!isPromiseLike(this.#n.teardown(this,`warmup`)),"`teardown` function must be sync when using `runSync()`"),this.#v(i)}async#p(i,D,O){try{this.#i.beforeAll&&await this.#i.beforeAll.call(this,i);let k=0,A=[],j=async()=>{if(!this.#e)try{this.#i.beforeEach!=null&&await this.#i.beforeEach.call(this,i);let D=this.#t?await this.#h():this.#g();A.push(D),k+=D}finally{this.#i.afterEach!=null&&await this.#i.afterEach.call(this,i)}};if(this.#n.concurrency===`task`)await withConcurrency({fn:j,iterations:O,limit:Math.max(1,Math.floor(this.#n.threshold)),signal:this.#l??this.#n.signal,time:D,timestampProvider:this.#d}),this.#c=A.length;else for(;(k<D||A.length<O)&&!this.#e;)await j();return this.#i.afterAll!=null&&await this.#i.afterAll.call(this,i),isValidSamples(A)?{samples:A}:{}}catch(i){return{error:toError(i)}}}#m(i,D,O){try{this.#i.beforeAll&&assert(!isPromiseLike(this.#i.beforeAll.call(this,i)),"`beforeAll` function must be sync when using `runSync()`");let k=0,A=[],j=()=>{if(!this.#e)try{this.#i.beforeEach&&assert(!isPromiseLike(this.#i.beforeEach.call(this,i)),"`beforeEach` function must be sync when using `runSync()`");let D=this.#g();A.push(D),k+=D}finally{this.#i.afterEach&&assert(!isPromiseLike(this.#i.afterEach.call(this,i)),"`afterEach` function must be sync when using `runSync()`")}};for(;(k<D||A.length<O)&&!this.#e;)j();return this.#i.afterAll&&assert(!isPromiseLike(this.#i.afterAll.call(this,i)),"`afterAll` function must be sync when using `runSync()`"),isValidSamples(A)?{samples:A}:{}}catch(i){return{error:toError(i)}}}async#h(){let i=this.#u(),D=await this.#r.call(this),O=this.#f(this.#u()-i),k=getOverriddenDurationFromFnResult(D);return k===void 0?O:k}#g(){let i=this.#u(),D=this.#r.call(this),O=this.#f(this.#u()-i);assert(!isPromiseLike(D),"task function must be sync when using `runSync()`");let k=getOverriddenDurationFromFnResult(D);return k===void 0?O:k}#_(){if(this.#e=!0,abortableStates.includes(this.#o.state)){this.#o=abortedTaskResult;let i=new BenchEvent(`abort`,this);this.dispatchEvent(i),this.#n.dispatchEvent(i)}}#v(i){if(i){this.#o={state:`errored`,error:i};let D=new BenchEvent(`error`,this,i);if(this.dispatchEvent(D),this.#n.dispatchEvent(D),this.#n.throws)throw i}}#y({error:i,latencySamples:D}){if(isValidSamples(D)){this.#c=D.length,sortSamples(D);let i=computeStatistics(D,this.#s),O=i.mean,k=0,A=[];for(let i of D)i===0?A.push(O===0?0:1e3/O):(k+=i,A.push(1e3/i));sortSamples(A);let j=computeStatistics(A,this.#s);this.#o={state:this.#e?`aborted-with-statistics`:`completed`,latency:i,period:k/this.runs,throughput:j,totalTime:k}}else this.#e&&(this.#o=abortedTaskResult);if(i){this.#o={state:`errored`,error:i};let D=new BenchEvent(`error`,this,i);if(this.dispatchEvent(D),this.#n.dispatchEvent(D),this.#n.throws)throw i}let k=new BenchEvent(`cycle`,this);this.dispatchEvent(k),this.#n.dispatchEvent(k),this.dispatchEvent(new BenchEvent(`complete`,this))}};function getOverriddenDurationFromFnResult(i){return typeof i==`object`&&i&&`overriddenDuration`in i&&typeof i.overriddenDuration==`number`&&Number.isFinite(i.overriddenDuration)&&i.overriddenDuration>=0?i.overriddenDuration:void 0}var Bench=class extends EventTarget{concurrency;iterations;name;now;retainSamples;runtime;runtimeVersion;setup;signal;teardown;threshold;throws;time;timestampProvider;warmup;warmupIterations;warmupTime;get results(){return this.tasks.map(i=>i.result)}get tasks(){return[...this.#e.values()]}#e=new Map;constructor(i={}){super();let{name:k,...A}=i;this.name=k,this.runtime=runtime,this.runtimeVersion=runtimeVersion,this.concurrency=A.concurrency??null,this.threshold=A.threshold??1/0,this.time=A.time??1e3,this.iterations=A.iterations??64,assert(!(A.now!==void 0&&A.timestampProvider!==void 0),"Cannot set both `now` and `timestampProvider` options"),this.timestampProvider=getTimestampProvider(A.now??A.timestampProvider),this.now=()=>this.timestampProvider.toMs(this.timestampProvider.fn()),this.warmup=A.warmup??!0,this.warmupIterations=A.warmupIterations??16,this.warmupTime=A.warmupTime??250,this.setup=A.setup??emptyFunction,this.teardown=A.teardown??emptyFunction,this.throws=A.throws??!1,this.signal=A.signal,this.retainSamples=A.retainSamples===!0,this.signal&&this.signal.addEventListener(`abort`,()=>{this.dispatchEvent(new BenchEvent(`abort`))},{once:!0})}add(i,D,k={}){if(this.#e.has(i))throw Error(`Task "${i}" already exists`);{let A=new Task(this,i,D,k);this.#e.set(i,A),this.dispatchEvent(new BenchEvent(`add`,A))}return this}getTask(i){return this.#e.get(i)}remove(i){let D=this.getTask(i);return D&&(this.#e.delete(i),this.dispatchEvent(new BenchEvent(`remove`,D))),this}reset(){for(let i of this.#e.values())i.reset();this.dispatchEvent(new BenchEvent(`reset`))}async run(){this.warmup&&await this.#t(),this.dispatchEvent(new BenchEvent(`start`));let i=[];if(this.concurrency===`bench`){let D=[];for(let i of this.#e.values())D.push(i.run());i=await Promise.all(D)}else for(let D of this.#e.values())i.push(await D.run());return this.dispatchEvent(new BenchEvent(`complete`)),i}runSync(){assert(this.concurrency===null,"Cannot use `concurrency` option when using `runSync`"),this.warmup&&this.#n();let i=[];this.dispatchEvent(new BenchEvent(`start`));for(let D of this.#e.values())i.push(D.runSync());return this.dispatchEvent(new BenchEvent(`complete`)),i}table(i=defaultConvertTaskResultForConsoleTable){return this.tasks.map(i)}async#t(){if(this.dispatchEvent(new BenchEvent(`warmup`)),this.concurrency===`bench`){let i=[];for(let D of this.#e.values())i.push(D.warmup());await Promise.all(i)}else for(let i of this.#e.values())await i.warmup()}#n(){this.dispatchEvent(new BenchEvent(`warmup`));for(let i of this.#e.values())i.warmupSync()}};export{Bench,Task,formatNumber,hrtimeNow,nToMs,performanceNow as now};