版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

325 строки
8.2 KiB

  1. "use strict";
  2. var f = Object.defineProperty;
  3. var H = Object.getOwnPropertyDescriptor;
  4. var P = Object.getOwnPropertyNames;
  5. var S = Object.prototype.hasOwnProperty;
  6. var j = (s, i, t) => i in s ? f(s, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : s[i] = t;
  7. var q = (s, i) => {
  8. for (var t in i)
  9. f(s, t, { get: i[t], enumerable: !0 });
  10. }, z = (s, i, t, e) => {
  11. if (i && typeof i == "object" || typeof i == "function")
  12. for (let n of P(i))
  13. !S.call(s, n) && n !== t && f(s, n, { get: () => i[n], enumerable: !(e = H(i, n)) || e.enumerable });
  14. return s;
  15. };
  16. var V = (s) => z(f({}, "__esModule", { value: !0 }), s);
  17. var r = (s, i, t) => (j(s, typeof i != "symbol" ? i + "" : i, t), t);
  18. // src/index.ts
  19. var J = {};
  20. q(J, {
  21. Bench: () => u,
  22. Task: () => p,
  23. default: () => G,
  24. now: () => E
  25. });
  26. module.exports = V(J);
  27. // src/event.ts
  28. function a(s, i = null) {
  29. let t = new Event(s);
  30. return Object.defineProperty(t, "task", {
  31. value: i,
  32. enumerable: !0,
  33. writable: !1,
  34. configurable: !1
  35. }), t;
  36. }
  37. // src/constants.ts
  38. var C = {
  39. 1: 12.71,
  40. 2: 4.303,
  41. 3: 3.182,
  42. 4: 2.776,
  43. 5: 2.571,
  44. 6: 2.447,
  45. 7: 2.365,
  46. 8: 2.306,
  47. 9: 2.262,
  48. 10: 2.228,
  49. 11: 2.201,
  50. 12: 2.179,
  51. 13: 2.16,
  52. 14: 2.145,
  53. 15: 2.131,
  54. 16: 2.12,
  55. 17: 2.11,
  56. 18: 2.101,
  57. 19: 2.093,
  58. 20: 2.086,
  59. 21: 2.08,
  60. 22: 2.074,
  61. 23: 2.069,
  62. 24: 2.064,
  63. 25: 2.06,
  64. 26: 2.056,
  65. 27: 2.052,
  66. 28: 2.048,
  67. 29: 2.045,
  68. 30: 2.042,
  69. 31: 2.0399,
  70. 32: 2.0378,
  71. 33: 2.0357,
  72. 34: 2.0336,
  73. 35: 2.0315,
  74. 36: 2.0294,
  75. 37: 2.0273,
  76. 38: 2.0252,
  77. 39: 2.0231,
  78. 40: 2.021,
  79. 41: 2.0198,
  80. 42: 2.0186,
  81. 43: 2.0174,
  82. 44: 2.0162,
  83. 45: 2.015,
  84. 46: 2.0138,
  85. 47: 2.0126,
  86. 48: 2.0114,
  87. 49: 2.0102,
  88. 50: 2.009,
  89. 51: 2.0081,
  90. 52: 2.0072,
  91. 53: 2.0063,
  92. 54: 2.0054,
  93. 55: 2.0045,
  94. 56: 2.0036,
  95. 57: 2.0027,
  96. 58: 2.0018,
  97. 59: 2.0009,
  98. 60: 2,
  99. 61: 1.9995,
  100. 62: 1.999,
  101. 63: 1.9985,
  102. 64: 1.998,
  103. 65: 1.9975,
  104. 66: 1.997,
  105. 67: 1.9965,
  106. 68: 1.996,
  107. 69: 1.9955,
  108. 70: 1.995,
  109. 71: 1.9945,
  110. 72: 1.994,
  111. 73: 1.9935,
  112. 74: 1.993,
  113. 75: 1.9925,
  114. 76: 1.992,
  115. 77: 1.9915,
  116. 78: 1.991,
  117. 79: 1.9905,
  118. 80: 1.99,
  119. 81: 1.9897,
  120. 82: 1.9894,
  121. 83: 1.9891,
  122. 84: 1.9888,
  123. 85: 1.9885,
  124. 86: 1.9882,
  125. 87: 1.9879,
  126. 88: 1.9876,
  127. 89: 1.9873,
  128. 90: 1.987,
  129. 91: 1.9867,
  130. 92: 1.9864,
  131. 93: 1.9861,
  132. 94: 1.9858,
  133. 95: 1.9855,
  134. 96: 1.9852,
  135. 97: 1.9849,
  136. 98: 1.9846,
  137. 99: 1.9843,
  138. 100: 1.984,
  139. 101: 1.9838,
  140. 102: 1.9836,
  141. 103: 1.9834,
  142. 104: 1.9832,
  143. 105: 1.983,
  144. 106: 1.9828,
  145. 107: 1.9826,
  146. 108: 1.9824,
  147. 109: 1.9822,
  148. 110: 1.982,
  149. 111: 1.9818,
  150. 112: 1.9816,
  151. 113: 1.9814,
  152. 114: 1.9812,
  153. 115: 1.9819,
  154. 116: 1.9808,
  155. 117: 1.9806,
  156. 118: 1.9804,
  157. 119: 1.9802,
  158. 120: 1.98,
  159. infinity: 1.96
  160. }, w = C;
  161. // src/utils.ts
  162. var N = (s) => s / 1e6, E = () => {
  163. var s;
  164. return typeof ((s = globalThis.process) == null ? void 0 : s.hrtime) == "function" ? N(Number(process.hrtime.bigint())) : performance.now();
  165. }, B = (s) => s.reduce((i, t) => i + t, 0) / s.length || 0, F = (s, i) => s.reduce((e, n) => e + (n - i) ** 2) / (s.length - 1) || 0, D = (async () => {
  166. }).constructor, O = (s) => s.constructor === D;
  167. // src/task.ts
  168. var p = class extends EventTarget {
  169. constructor(t, e, n, o = {}) {
  170. super();
  171. r(this, "bench");
  172. r(this, "name");
  173. r(this, "fn");
  174. r(this, "runs", 0);
  175. r(this, "result");
  176. r(this, "opts");
  177. this.bench = t, this.name = e, this.fn = n, this.opts = o;
  178. }
  179. async run() {
  180. var o, l, m;
  181. this.dispatchEvent(a("start", this));
  182. let t = 0, e = [], n = O(this.fn);
  183. for (await this.bench.setup(this, "run"), this.opts.beforeAll != null && await this.opts.beforeAll.call(this); (t < this.bench.time || this.runs < this.bench.iterations) && !((o = this.bench.signal) != null && o.aborted); ) {
  184. this.opts.beforeEach != null && await this.opts.beforeEach.call(this);
  185. let h = 0;
  186. try {
  187. h = this.bench.now(), n ? await this.fn() : this.fn();
  188. } catch (v) {
  189. this.setResult({ error: v });
  190. }
  191. let c = this.bench.now() - h;
  192. this.runs += 1, e.push(c), t += c, this.opts.afterEach != null && await this.opts.afterEach.call(this);
  193. }
  194. this.opts.afterAll != null && await this.opts.afterAll.call(this), await this.bench.teardown(this, "run"), e.sort((h, c) => h - c);
  195. {
  196. let h = e[0], c = e[e.length - 1], v = t / this.runs, L = 1e3 / v, b = B(e), T = F(e, b), k = Math.sqrt(T), g = k / Math.sqrt(e.length), y = e.length - 1, x = w[String(Math.round(y) || 1)] || w.infinity, M = g * x, K = M / b * 100 || 0, A = e[Math.ceil(e.length * (75 / 100)) - 1], R = e[Math.ceil(e.length * (99 / 100)) - 1], _ = e[Math.ceil(e.length * (99.5 / 100)) - 1], I = e[Math.ceil(e.length * (99.9 / 100)) - 1];
  197. if ((l = this.bench.signal) != null && l.aborted)
  198. return this;
  199. this.setResult({
  200. totalTime: t,
  201. min: h,
  202. max: c,
  203. hz: L,
  204. period: v,
  205. samples: e,
  206. mean: b,
  207. variance: T,
  208. sd: k,
  209. sem: g,
  210. df: y,
  211. critical: x,
  212. moe: M,
  213. rme: K,
  214. p75: A,
  215. p99: R,
  216. p995: _,
  217. p999: I
  218. });
  219. }
  220. return (m = this.result) != null && m.error && (this.dispatchEvent(a("error", this)), this.bench.dispatchEvent(a("error", this))), this.dispatchEvent(a("cycle", this)), this.bench.dispatchEvent(a("cycle", this)), this.dispatchEvent(a("complete", this)), this;
  221. }
  222. async warmup() {
  223. var n;
  224. this.dispatchEvent(a("warmup", this));
  225. let t = this.bench.now(), e = 0;
  226. for (this.bench.setup(this, "warmup"); (e < this.bench.warmupTime || this.runs < this.bench.warmupIterations) && !((n = this.bench.signal) != null && n.aborted); ) {
  227. try {
  228. await Promise.resolve().then(this.fn);
  229. } catch (o) {
  230. }
  231. this.runs += 1, e = this.bench.now() - t;
  232. }
  233. this.bench.teardown(this, "warmup"), this.runs = 0;
  234. }
  235. addEventListener(t, e, n) {
  236. super.addEventListener(t, e, n);
  237. }
  238. removeEventListener(t, e, n) {
  239. super.removeEventListener(t, e, n);
  240. }
  241. setResult(t) {
  242. this.result = { ...this.result, ...t }, Object.freeze(this.reset);
  243. }
  244. reset() {
  245. this.dispatchEvent(a("reset", this)), this.runs = 0, this.result = void 0;
  246. }
  247. };
  248. // src/bench.ts
  249. var u = class extends EventTarget {
  250. constructor(t = {}) {
  251. var e, n, o, l, m, h, c;
  252. super();
  253. r(this, "_tasks", /* @__PURE__ */ new Map());
  254. r(this, "signal");
  255. r(this, "warmupTime", 100);
  256. r(this, "warmupIterations", 5);
  257. r(this, "time", 500);
  258. r(this, "iterations", 10);
  259. r(this, "now", E);
  260. r(this, "setup");
  261. r(this, "teardown");
  262. this.now = (e = t.now) != null ? e : this.now, this.warmupTime = (n = t.warmupTime) != null ? n : this.warmupTime, this.warmupIterations = (o = t.warmupIterations) != null ? o : this.warmupIterations, this.time = (l = t.time) != null ? l : this.time, this.iterations = (m = t.iterations) != null ? m : this.iterations, this.signal = t.signal, this.setup = (h = t.setup) != null ? h : () => {
  263. }, this.teardown = (c = t.teardown) != null ? c : () => {
  264. }, this.signal && this.signal.addEventListener("abort", () => {
  265. this.dispatchEvent(a("abort"));
  266. }, { once: !0 });
  267. }
  268. async run() {
  269. var e;
  270. this.dispatchEvent(a("start"));
  271. let t = [];
  272. for (let n of [...this._tasks.values()])
  273. (e = this.signal) != null && e.aborted ? t.push(n) : t.push(await n.run());
  274. return this.dispatchEvent(a("complete")), t;
  275. }
  276. async warmup() {
  277. this.dispatchEvent(a("warmup"));
  278. for (let [, t] of this._tasks)
  279. await t.warmup();
  280. }
  281. reset() {
  282. this.dispatchEvent(a("reset")), this._tasks.forEach((t) => {
  283. t.reset();
  284. });
  285. }
  286. add(t, e, n = {}) {
  287. let o = new p(this, t, e, n);
  288. return this._tasks.set(t, o), this.dispatchEvent(a("add", o)), this;
  289. }
  290. remove(t) {
  291. let e = this.getTask(t);
  292. return this.dispatchEvent(a("remove", e)), this._tasks.delete(t), this;
  293. }
  294. addEventListener(t, e, n) {
  295. super.addEventListener(t, e, n);
  296. }
  297. removeEventListener(t, e, n) {
  298. super.removeEventListener(t, e, n);
  299. }
  300. get results() {
  301. return [...this._tasks.values()].map((t) => t.result);
  302. }
  303. get tasks() {
  304. return [...this._tasks.values()];
  305. }
  306. getTask(t) {
  307. return this._tasks.get(t);
  308. }
  309. };
  310. // src/index.ts
  311. var G = u;
  312. // Annotate the CommonJS export names for ESM import in node:
  313. 0 && (module.exports = {
  314. Bench,
  315. Task,
  316. now
  317. });