overtake 1.3.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -15
- package/bin/overtake.js +1 -1
- package/build/executor.d.ts +8 -3
- package/build/index.d.ts +10 -11
- package/build/reporter.d.ts +10 -2
- package/build/runner.d.ts +1 -1
- package/build/types.d.ts +7 -7
- package/build/utils.d.ts +3 -17
- package/package.json +8 -26
- package/src/__tests__/assert-no-closure.ts +135 -0
- package/src/__tests__/benchmark-execute.ts +48 -0
- package/src/cli.ts +139 -144
- package/src/executor.ts +59 -24
- package/src/index.ts +135 -68
- package/src/reporter.ts +77 -125
- package/src/runner.ts +28 -25
- package/src/types.ts +9 -9
- package/src/utils.ts +62 -46
- package/src/worker.ts +13 -12
- package/tsconfig.json +3 -1
- package/build/cli.cjs +0 -179
- package/build/cli.cjs.map +0 -1
- package/build/cli.js +0 -134
- package/build/cli.js.map +0 -1
- package/build/executor.cjs +0 -116
- package/build/executor.cjs.map +0 -1
- package/build/executor.js +0 -106
- package/build/executor.js.map +0 -1
- package/build/gc-watcher.cjs +0 -30
- package/build/gc-watcher.cjs.map +0 -1
- package/build/gc-watcher.js +0 -20
- package/build/gc-watcher.js.map +0 -1
- package/build/index.cjs +0 -400
- package/build/index.cjs.map +0 -1
- package/build/index.js +0 -335
- package/build/index.js.map +0 -1
- package/build/reporter.cjs +0 -364
- package/build/reporter.cjs.map +0 -1
- package/build/reporter.js +0 -346
- package/build/reporter.js.map +0 -1
- package/build/runner.cjs +0 -528
- package/build/runner.cjs.map +0 -1
- package/build/runner.js +0 -518
- package/build/runner.js.map +0 -1
- package/build/types.cjs +0 -66
- package/build/types.cjs.map +0 -1
- package/build/types.js +0 -33
- package/build/types.js.map +0 -1
- package/build/utils.cjs +0 -121
- package/build/utils.cjs.map +0 -1
- package/build/utils.js +0 -85
- package/build/utils.js.map +0 -1
- package/build/worker.cjs +0 -158
- package/build/worker.cjs.map +0 -1
- package/build/worker.js +0 -113
- package/build/worker.js.map +0 -1
package/build/reporter.js
DELETED
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import { div, max, divs } from "./utils.js";
|
|
2
|
-
import { DURATION_SCALE, Z95 } from "./types.js";
|
|
3
|
-
const units = [
|
|
4
|
-
{
|
|
5
|
-
unit: 'ns',
|
|
6
|
-
factor: 1
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
unit: 'µs',
|
|
10
|
-
factor: 1e3
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
unit: 'ms',
|
|
14
|
-
factor: 1e6
|
|
15
|
-
},
|
|
16
|
-
{
|
|
17
|
-
unit: 's',
|
|
18
|
-
factor: 1e9
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
unit: 'm',
|
|
22
|
-
factor: 60 * 1e9
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
unit: 'h',
|
|
26
|
-
factor: 3600 * 1e9
|
|
27
|
-
}
|
|
28
|
-
];
|
|
29
|
-
function smartFixed(n) {
|
|
30
|
-
return n.toLocaleString(undefined, {
|
|
31
|
-
minimumFractionDigits: 0,
|
|
32
|
-
maximumFractionDigits: 2,
|
|
33
|
-
useGrouping: true
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
export class Report {
|
|
37
|
-
type;
|
|
38
|
-
value;
|
|
39
|
-
uncertainty;
|
|
40
|
-
scale;
|
|
41
|
-
constructor(type, value, uncertainty = 0, scale = 1n){
|
|
42
|
-
this.type = type;
|
|
43
|
-
this.value = value;
|
|
44
|
-
this.uncertainty = uncertainty;
|
|
45
|
-
this.scale = scale;
|
|
46
|
-
}
|
|
47
|
-
valueOf() {
|
|
48
|
-
return Number(div(this.value, this.scale));
|
|
49
|
-
}
|
|
50
|
-
toString() {
|
|
51
|
-
const uncertainty = this.uncertainty ? ` ± ${smartFixed(this.uncertainty)}%` : '';
|
|
52
|
-
const value = this.valueOf();
|
|
53
|
-
if (this.type === 'ops') {
|
|
54
|
-
return `${smartFixed(value)} ops/s${uncertainty}`;
|
|
55
|
-
}
|
|
56
|
-
if (this.type === 'rme') {
|
|
57
|
-
return `${smartFixed(value)}%`;
|
|
58
|
-
}
|
|
59
|
-
if (this.type === 'variance') {
|
|
60
|
-
let display = value;
|
|
61
|
-
let unit = 'ns²';
|
|
62
|
-
const varianceUnits = [
|
|
63
|
-
{
|
|
64
|
-
unit: 'ns²',
|
|
65
|
-
factor: 1
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
unit: 'µs²',
|
|
69
|
-
factor: 1e6
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
unit: 'ms²',
|
|
73
|
-
factor: 1e12
|
|
74
|
-
}
|
|
75
|
-
];
|
|
76
|
-
for (const { unit: u, factor } of varianceUnits){
|
|
77
|
-
const candidate = value / factor;
|
|
78
|
-
if (candidate < 1000) {
|
|
79
|
-
display = candidate;
|
|
80
|
-
unit = u;
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return `${smartFixed(display)} ${unit}`;
|
|
85
|
-
}
|
|
86
|
-
let display = value;
|
|
87
|
-
let unit = 'ns';
|
|
88
|
-
for (const { unit: u, factor } of units){
|
|
89
|
-
const candidate = value / factor;
|
|
90
|
-
if (candidate < 1000) {
|
|
91
|
-
display = candidate;
|
|
92
|
-
unit = u;
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return `${smartFixed(display)} ${unit}${uncertainty}`;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
export const createReport = (durations, type)=>{
|
|
100
|
-
const n = durations.length;
|
|
101
|
-
if (n === 0) {
|
|
102
|
-
return new Report(type, 0n);
|
|
103
|
-
}
|
|
104
|
-
switch(type){
|
|
105
|
-
case 'min':
|
|
106
|
-
{
|
|
107
|
-
return new Report(type, durations[0], 0, DURATION_SCALE);
|
|
108
|
-
}
|
|
109
|
-
case 'max':
|
|
110
|
-
{
|
|
111
|
-
return new Report(type, durations[n - 1], 0, DURATION_SCALE);
|
|
112
|
-
}
|
|
113
|
-
case 'median':
|
|
114
|
-
{
|
|
115
|
-
const mid = Math.floor(n / 2);
|
|
116
|
-
const med = n % 2 === 0 ? (durations[mid - 1] + durations[mid]) / 2n : durations[mid];
|
|
117
|
-
return new Report(type, med, 0, DURATION_SCALE);
|
|
118
|
-
}
|
|
119
|
-
case 'mode':
|
|
120
|
-
{
|
|
121
|
-
const freq = new Map();
|
|
122
|
-
let maxCount = 0n;
|
|
123
|
-
let modeVal = durations[0];
|
|
124
|
-
for (const d of durations){
|
|
125
|
-
const count = (freq.get(d) || 0n) + 1n;
|
|
126
|
-
freq.set(d, count);
|
|
127
|
-
if (count > maxCount) {
|
|
128
|
-
maxCount = count;
|
|
129
|
-
modeVal = d;
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
let lower = modeVal;
|
|
133
|
-
let upper = modeVal;
|
|
134
|
-
const firstIdx = durations.indexOf(modeVal);
|
|
135
|
-
const lastIdx = durations.lastIndexOf(modeVal);
|
|
136
|
-
if (firstIdx > 0) lower = durations[firstIdx - 1];
|
|
137
|
-
if (lastIdx < n - 1) upper = durations[lastIdx + 1];
|
|
138
|
-
const gap = max(modeVal - lower, upper - modeVal);
|
|
139
|
-
const uncertainty = modeVal > 0 ? Number(gap / 2n * 100n / modeVal) : 0;
|
|
140
|
-
return new Report(type, modeVal, uncertainty, DURATION_SCALE);
|
|
141
|
-
}
|
|
142
|
-
case 'ops':
|
|
143
|
-
{
|
|
144
|
-
let sum = 0n;
|
|
145
|
-
for (const duration of durations){
|
|
146
|
-
sum += duration;
|
|
147
|
-
}
|
|
148
|
-
const avgScaled = sum / BigInt(n);
|
|
149
|
-
const nsPerSecScaled = 1_000_000_000n * DURATION_SCALE;
|
|
150
|
-
const raw = Number(nsPerSecScaled) / Number(avgScaled);
|
|
151
|
-
const extra = raw < 1 ? Math.ceil(-Math.log10(raw)) : 0;
|
|
152
|
-
const exp = raw > 100 ? 0 : 2 + extra;
|
|
153
|
-
const scale = 10n ** BigInt(exp);
|
|
154
|
-
const value = avgScaled > 0n ? nsPerSecScaled * scale / avgScaled : 0n;
|
|
155
|
-
const deviation = durations[n - 1] - durations[0];
|
|
156
|
-
const uncertainty = avgScaled > 0 ? Number(div(deviation * scale, 2n * avgScaled)) : 0;
|
|
157
|
-
return new Report(type, value, uncertainty, scale);
|
|
158
|
-
}
|
|
159
|
-
case 'mean':
|
|
160
|
-
{
|
|
161
|
-
let sum = 0n;
|
|
162
|
-
for (const duration of durations){
|
|
163
|
-
sum += duration;
|
|
164
|
-
}
|
|
165
|
-
const value = divs(sum, BigInt(n), 1n);
|
|
166
|
-
return new Report(type, value, 0, DURATION_SCALE);
|
|
167
|
-
}
|
|
168
|
-
case 'variance':
|
|
169
|
-
{
|
|
170
|
-
if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE * DURATION_SCALE);
|
|
171
|
-
let sum = 0n;
|
|
172
|
-
for (const duration of durations){
|
|
173
|
-
sum += duration;
|
|
174
|
-
}
|
|
175
|
-
const mean = sum / BigInt(n);
|
|
176
|
-
let sumSquaredDiff = 0n;
|
|
177
|
-
for (const duration of durations){
|
|
178
|
-
const diff = duration - mean;
|
|
179
|
-
sumSquaredDiff += diff * diff;
|
|
180
|
-
}
|
|
181
|
-
const variance = sumSquaredDiff / BigInt(n - 1);
|
|
182
|
-
return new Report(type, variance, 0, DURATION_SCALE * DURATION_SCALE);
|
|
183
|
-
}
|
|
184
|
-
case 'sd':
|
|
185
|
-
{
|
|
186
|
-
if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);
|
|
187
|
-
let sum = 0n;
|
|
188
|
-
for (const duration of durations){
|
|
189
|
-
sum += duration;
|
|
190
|
-
}
|
|
191
|
-
const mean = sum / BigInt(n);
|
|
192
|
-
let sumSquaredDiff = 0n;
|
|
193
|
-
for (const duration of durations){
|
|
194
|
-
const diff = duration - mean;
|
|
195
|
-
sumSquaredDiff += diff * diff;
|
|
196
|
-
}
|
|
197
|
-
const variance = Number(sumSquaredDiff) / (n - 1);
|
|
198
|
-
const sd = Math.sqrt(variance);
|
|
199
|
-
const sdScaled = BigInt(Math.round(sd));
|
|
200
|
-
return new Report(type, sdScaled, 0, DURATION_SCALE);
|
|
201
|
-
}
|
|
202
|
-
case 'sem':
|
|
203
|
-
{
|
|
204
|
-
if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);
|
|
205
|
-
let sum = 0n;
|
|
206
|
-
for (const duration of durations){
|
|
207
|
-
sum += duration;
|
|
208
|
-
}
|
|
209
|
-
const mean = sum / BigInt(n);
|
|
210
|
-
let sumSquaredDiff = 0n;
|
|
211
|
-
for (const duration of durations){
|
|
212
|
-
const diff = duration - mean;
|
|
213
|
-
sumSquaredDiff += diff * diff;
|
|
214
|
-
}
|
|
215
|
-
const variance = Number(sumSquaredDiff) / (n - 1);
|
|
216
|
-
const sd = Math.sqrt(variance);
|
|
217
|
-
const sem = sd / Math.sqrt(n);
|
|
218
|
-
const semScaled = BigInt(Math.round(sem));
|
|
219
|
-
return new Report(type, semScaled, 0, DURATION_SCALE);
|
|
220
|
-
}
|
|
221
|
-
case 'moe':
|
|
222
|
-
{
|
|
223
|
-
if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);
|
|
224
|
-
let sum = 0n;
|
|
225
|
-
for (const duration of durations){
|
|
226
|
-
sum += duration;
|
|
227
|
-
}
|
|
228
|
-
const mean = sum / BigInt(n);
|
|
229
|
-
let sumSquaredDiff = 0n;
|
|
230
|
-
for (const duration of durations){
|
|
231
|
-
const diff = duration - mean;
|
|
232
|
-
sumSquaredDiff += diff * diff;
|
|
233
|
-
}
|
|
234
|
-
const variance = Number(sumSquaredDiff) / (n - 1);
|
|
235
|
-
const sd = Math.sqrt(variance);
|
|
236
|
-
const sem = sd / Math.sqrt(n);
|
|
237
|
-
const moe = Z95 * sem;
|
|
238
|
-
const moeScaled = BigInt(Math.round(moe));
|
|
239
|
-
return new Report(type, moeScaled, 0, DURATION_SCALE);
|
|
240
|
-
}
|
|
241
|
-
case 'rme':
|
|
242
|
-
{
|
|
243
|
-
if (n < 2) return new Report(type, 0n);
|
|
244
|
-
let sum = 0n;
|
|
245
|
-
for (const duration of durations){
|
|
246
|
-
sum += duration;
|
|
247
|
-
}
|
|
248
|
-
const mean = Number(sum) / n;
|
|
249
|
-
if (mean === 0) return new Report(type, 0n);
|
|
250
|
-
let sumSquaredDiff = 0;
|
|
251
|
-
for (const duration of durations){
|
|
252
|
-
const diff = Number(duration) - mean;
|
|
253
|
-
sumSquaredDiff += diff * diff;
|
|
254
|
-
}
|
|
255
|
-
const variance = sumSquaredDiff / (n - 1);
|
|
256
|
-
const sd = Math.sqrt(variance);
|
|
257
|
-
const sem = sd / Math.sqrt(n);
|
|
258
|
-
const moe = Z95 * sem;
|
|
259
|
-
const rme = moe / mean * 100;
|
|
260
|
-
const rmeScaled = BigInt(Math.round(rme * 100));
|
|
261
|
-
return new Report(type, rmeScaled, 0, 100n);
|
|
262
|
-
}
|
|
263
|
-
case 'mad':
|
|
264
|
-
{
|
|
265
|
-
const medianIdx = Math.floor(n / 2);
|
|
266
|
-
const median = n % 2 === 1 ? durations[medianIdx] : (durations[medianIdx - 1] + durations[medianIdx]) / 2n;
|
|
267
|
-
const deviations = new BigUint64Array(n);
|
|
268
|
-
for(let i = 0; i < n; i++){
|
|
269
|
-
const diff = durations[i] > median ? durations[i] - median : median - durations[i];
|
|
270
|
-
deviations[i] = diff;
|
|
271
|
-
}
|
|
272
|
-
deviations.sort();
|
|
273
|
-
const madIdx = Math.floor(n / 2);
|
|
274
|
-
const mad = n % 2 === 1 ? deviations[madIdx] : (deviations[madIdx - 1] + deviations[madIdx]) / 2n;
|
|
275
|
-
return new Report(type, mad, 0, DURATION_SCALE);
|
|
276
|
-
}
|
|
277
|
-
case 'iqr':
|
|
278
|
-
{
|
|
279
|
-
const q1Idx = Math.floor(n * 0.25);
|
|
280
|
-
const q3Idx = Math.floor(n * 0.75);
|
|
281
|
-
const q1 = durations[q1Idx];
|
|
282
|
-
const q3 = durations[q3Idx];
|
|
283
|
-
const iqr = q3 - q1;
|
|
284
|
-
return new Report(type, iqr, 0, DURATION_SCALE);
|
|
285
|
-
}
|
|
286
|
-
case 'ci_lower':
|
|
287
|
-
{
|
|
288
|
-
if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);
|
|
289
|
-
let sum = 0n;
|
|
290
|
-
for (const duration of durations){
|
|
291
|
-
sum += duration;
|
|
292
|
-
}
|
|
293
|
-
const mean = Number(sum) / n;
|
|
294
|
-
let sumSquaredDiff = 0;
|
|
295
|
-
for (const duration of durations){
|
|
296
|
-
const diff = Number(duration) - mean;
|
|
297
|
-
sumSquaredDiff += diff * diff;
|
|
298
|
-
}
|
|
299
|
-
const variance = sumSquaredDiff / (n - 1);
|
|
300
|
-
const sd = Math.sqrt(variance);
|
|
301
|
-
const sem = sd / Math.sqrt(n);
|
|
302
|
-
const moe = Z95 * sem;
|
|
303
|
-
const ciLower = Math.max(0, mean - moe);
|
|
304
|
-
return new Report(type, BigInt(Math.round(ciLower)), 0, DURATION_SCALE);
|
|
305
|
-
}
|
|
306
|
-
case 'ci_upper':
|
|
307
|
-
{
|
|
308
|
-
if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);
|
|
309
|
-
let sum = 0n;
|
|
310
|
-
for (const duration of durations){
|
|
311
|
-
sum += duration;
|
|
312
|
-
}
|
|
313
|
-
const mean = Number(sum) / n;
|
|
314
|
-
let sumSquaredDiff = 0;
|
|
315
|
-
for (const duration of durations){
|
|
316
|
-
const diff = Number(duration) - mean;
|
|
317
|
-
sumSquaredDiff += diff * diff;
|
|
318
|
-
}
|
|
319
|
-
const variance = sumSquaredDiff / (n - 1);
|
|
320
|
-
const sd = Math.sqrt(variance);
|
|
321
|
-
const sem = sd / Math.sqrt(n);
|
|
322
|
-
const moe = Z95 * sem;
|
|
323
|
-
const ciUpper = mean + moe;
|
|
324
|
-
return new Report(type, BigInt(Math.round(ciUpper)), 0, DURATION_SCALE);
|
|
325
|
-
}
|
|
326
|
-
default:
|
|
327
|
-
{
|
|
328
|
-
const p = Number(type.slice(1));
|
|
329
|
-
if (p === 0) {
|
|
330
|
-
return new Report(type, durations[0], 0, DURATION_SCALE);
|
|
331
|
-
}
|
|
332
|
-
if (p === 100) {
|
|
333
|
-
return new Report(type, durations[n - 1], 0, DURATION_SCALE);
|
|
334
|
-
}
|
|
335
|
-
const idx = Math.ceil(p / 100 * n) - 1;
|
|
336
|
-
const value = durations[Math.min(Math.max(idx, 0), n - 1)];
|
|
337
|
-
const prev = idx > 0 ? durations[idx - 1] : value;
|
|
338
|
-
const next = idx < n - 1 ? durations[idx + 1] : value;
|
|
339
|
-
const gap = max(value - prev, next - value);
|
|
340
|
-
const uncertainty = value > 0 ? Number(div(divs(gap, 2n, 100_00n), value)) / 100 : 0;
|
|
341
|
-
return new Report(type, value, uncertainty, DURATION_SCALE);
|
|
342
|
-
}
|
|
343
|
-
}
|
|
344
|
-
};
|
|
345
|
-
|
|
346
|
-
//# sourceMappingURL=reporter.js.map
|
package/build/reporter.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/reporter.ts"],"sourcesContent":["import { div, max, divs } from './utils.js';\nimport { ReportType, DURATION_SCALE, Z95 } from './types.js';\n\nconst units = [\n { unit: 'ns', factor: 1 },\n { unit: 'µs', factor: 1e3 },\n { unit: 'ms', factor: 1e6 },\n { unit: 's', factor: 1e9 },\n { unit: 'm', factor: 60 * 1e9 },\n { unit: 'h', factor: 3600 * 1e9 },\n] as const;\n\nfunction smartFixed(n: number): string {\n return n.toLocaleString(undefined, {\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n useGrouping: true,\n });\n}\nexport class Report {\n constructor(\n public readonly type: ReportType,\n public readonly value: bigint,\n public readonly uncertainty: number = 0,\n public readonly scale: bigint = 1n,\n ) {}\n valueOf() {\n return Number(div(this.value, this.scale));\n }\n toString() {\n const uncertainty = this.uncertainty ? ` ± ${smartFixed(this.uncertainty)}%` : '';\n\n const value = this.valueOf();\n if (this.type === 'ops') {\n return `${smartFixed(value)} ops/s${uncertainty}`;\n }\n if (this.type === 'rme') {\n return `${smartFixed(value)}%`;\n }\n if (this.type === 'variance') {\n let display = value;\n let unit = 'ns²';\n const varianceUnits = [\n { unit: 'ns²', factor: 1 },\n { unit: 'µs²', factor: 1e6 },\n { unit: 'ms²', factor: 1e12 },\n ];\n for (const { unit: u, factor } of varianceUnits) {\n const candidate = value / factor;\n if (candidate < 1000) {\n display = candidate;\n unit = u;\n break;\n }\n }\n return `${smartFixed(display)} ${unit}`;\n }\n let display = value;\n let unit = 'ns';\n\n for (const { unit: u, factor } of units) {\n const candidate = value / factor;\n if (candidate < 1000) {\n display = candidate;\n unit = u;\n break;\n }\n }\n return `${smartFixed(display)} ${unit}${uncertainty}`;\n }\n}\n\nexport const createReport = (durations: BigUint64Array, type: ReportType): Report => {\n const n = durations.length;\n if (n === 0) {\n return new Report(type, 0n);\n }\n switch (type) {\n case 'min': {\n return new Report(type, durations[0], 0, DURATION_SCALE);\n }\n case 'max': {\n return new Report(type, durations[n - 1], 0, DURATION_SCALE);\n }\n case 'median': {\n const mid = Math.floor(n / 2);\n const med = n % 2 === 0 ? (durations[mid - 1] + durations[mid]) / 2n : durations[mid];\n return new Report(type, med, 0, DURATION_SCALE);\n }\n\n case 'mode': {\n const freq = new Map<bigint, bigint>();\n let maxCount = 0n;\n let modeVal = durations[0];\n for (const d of durations) {\n const count = (freq.get(d) || 0n) + 1n;\n freq.set(d, count);\n if (count > maxCount) {\n maxCount = count;\n modeVal = d;\n }\n }\n let lower = modeVal;\n let upper = modeVal;\n const firstIdx = durations.indexOf(modeVal);\n const lastIdx = durations.lastIndexOf(modeVal);\n if (firstIdx > 0) lower = durations[firstIdx - 1];\n if (lastIdx < n - 1) upper = durations[lastIdx + 1];\n const gap = max(modeVal - lower, upper - modeVal);\n const uncertainty = modeVal > 0 ? Number(((gap / 2n) * 100n) / modeVal) : 0;\n return new Report(type, modeVal, uncertainty, DURATION_SCALE);\n }\n\n case 'ops': {\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const avgScaled = sum / BigInt(n);\n const nsPerSecScaled = 1_000_000_000n * DURATION_SCALE;\n const raw = Number(nsPerSecScaled) / Number(avgScaled);\n const extra = raw < 1 ? Math.ceil(-Math.log10(raw)) : 0;\n\n const exp = raw > 100 ? 0 : 2 + extra;\n\n const scale = 10n ** BigInt(exp);\n\n const value = avgScaled > 0n ? (nsPerSecScaled * scale) / avgScaled : 0n;\n const deviation = durations[n - 1] - durations[0];\n const uncertainty = avgScaled > 0 ? Number(div(deviation * scale, 2n * avgScaled)) : 0;\n return new Report(type, value, uncertainty, scale);\n }\n case 'mean': {\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const value = divs(sum, BigInt(n), 1n);\n return new Report(type, value, 0, DURATION_SCALE);\n }\n\n case 'variance': {\n if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE * DURATION_SCALE);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = sum / BigInt(n);\n let sumSquaredDiff = 0n;\n for (const duration of durations) {\n const diff = duration - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = sumSquaredDiff / BigInt(n - 1);\n return new Report(type, variance, 0, DURATION_SCALE * DURATION_SCALE);\n }\n\n case 'sd': {\n if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = sum / BigInt(n);\n let sumSquaredDiff = 0n;\n for (const duration of durations) {\n const diff = duration - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = Number(sumSquaredDiff) / (n - 1);\n const sd = Math.sqrt(variance);\n const sdScaled = BigInt(Math.round(sd));\n return new Report(type, sdScaled, 0, DURATION_SCALE);\n }\n\n case 'sem': {\n if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = sum / BigInt(n);\n let sumSquaredDiff = 0n;\n for (const duration of durations) {\n const diff = duration - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = Number(sumSquaredDiff) / (n - 1);\n const sd = Math.sqrt(variance);\n const sem = sd / Math.sqrt(n);\n const semScaled = BigInt(Math.round(sem));\n return new Report(type, semScaled, 0, DURATION_SCALE);\n }\n\n case 'moe': {\n if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = sum / BigInt(n);\n let sumSquaredDiff = 0n;\n for (const duration of durations) {\n const diff = duration - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = Number(sumSquaredDiff) / (n - 1);\n const sd = Math.sqrt(variance);\n const sem = sd / Math.sqrt(n);\n const moe = Z95 * sem;\n const moeScaled = BigInt(Math.round(moe));\n return new Report(type, moeScaled, 0, DURATION_SCALE);\n }\n\n case 'rme': {\n if (n < 2) return new Report(type, 0n);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = Number(sum) / n;\n if (mean === 0) return new Report(type, 0n);\n let sumSquaredDiff = 0;\n for (const duration of durations) {\n const diff = Number(duration) - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = sumSquaredDiff / (n - 1);\n const sd = Math.sqrt(variance);\n const sem = sd / Math.sqrt(n);\n const moe = Z95 * sem;\n const rme = (moe / mean) * 100;\n const rmeScaled = BigInt(Math.round(rme * 100));\n return new Report(type, rmeScaled, 0, 100n);\n }\n\n case 'mad': {\n const medianIdx = Math.floor(n / 2);\n const median = n % 2 === 1 ? durations[medianIdx] : (durations[medianIdx - 1] + durations[medianIdx]) / 2n;\n const deviations = new BigUint64Array(n);\n for (let i = 0; i < n; i++) {\n const diff = durations[i] > median ? durations[i] - median : median - durations[i];\n deviations[i] = diff;\n }\n deviations.sort();\n const madIdx = Math.floor(n / 2);\n const mad = n % 2 === 1 ? deviations[madIdx] : (deviations[madIdx - 1] + deviations[madIdx]) / 2n;\n return new Report(type, mad, 0, DURATION_SCALE);\n }\n\n case 'iqr': {\n const q1Idx = Math.floor(n * 0.25);\n const q3Idx = Math.floor(n * 0.75);\n const q1 = durations[q1Idx];\n const q3 = durations[q3Idx];\n const iqr = q3 - q1;\n return new Report(type, iqr, 0, DURATION_SCALE);\n }\n\n case 'ci_lower': {\n if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = Number(sum) / n;\n let sumSquaredDiff = 0;\n for (const duration of durations) {\n const diff = Number(duration) - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = sumSquaredDiff / (n - 1);\n const sd = Math.sqrt(variance);\n const sem = sd / Math.sqrt(n);\n const moe = Z95 * sem;\n const ciLower = Math.max(0, mean - moe);\n return new Report(type, BigInt(Math.round(ciLower)), 0, DURATION_SCALE);\n }\n\n case 'ci_upper': {\n if (n < 2) return new Report(type, 0n, 0, DURATION_SCALE);\n let sum = 0n;\n for (const duration of durations) {\n sum += duration;\n }\n const mean = Number(sum) / n;\n let sumSquaredDiff = 0;\n for (const duration of durations) {\n const diff = Number(duration) - mean;\n sumSquaredDiff += diff * diff;\n }\n const variance = sumSquaredDiff / (n - 1);\n const sd = Math.sqrt(variance);\n const sem = sd / Math.sqrt(n);\n const moe = Z95 * sem;\n const ciUpper = mean + moe;\n return new Report(type, BigInt(Math.round(ciUpper)), 0, DURATION_SCALE);\n }\n\n default: {\n const p = Number(type.slice(1));\n if (p === 0) {\n return new Report(type, durations[0], 0, DURATION_SCALE);\n }\n if (p === 100) {\n return new Report(type, durations[n - 1], 0, DURATION_SCALE);\n }\n const idx = Math.ceil((p / 100) * n) - 1;\n const value = durations[Math.min(Math.max(idx, 0), n - 1)];\n const prev = idx > 0 ? durations[idx - 1] : value;\n const next = idx < n - 1 ? durations[idx + 1] : value;\n const gap = max(value - prev, next - value);\n const uncertainty = value > 0 ? Number(div(divs(gap, 2n, 100_00n), value)) / 100 : 0;\n\n return new Report(type, value, uncertainty, DURATION_SCALE);\n }\n }\n};\n"],"names":["div","max","divs","DURATION_SCALE","Z95","units","unit","factor","smartFixed","n","toLocaleString","undefined","minimumFractionDigits","maximumFractionDigits","useGrouping","Report","type","value","uncertainty","scale","valueOf","Number","toString","display","varianceUnits","u","candidate","createReport","durations","length","mid","Math","floor","med","freq","Map","maxCount","modeVal","d","count","get","set","lower","upper","firstIdx","indexOf","lastIdx","lastIndexOf","gap","sum","duration","avgScaled","BigInt","nsPerSecScaled","raw","extra","ceil","log10","exp","deviation","mean","sumSquaredDiff","diff","variance","sd","sqrt","sdScaled","round","sem","semScaled","moe","moeScaled","rme","rmeScaled","medianIdx","median","deviations","BigUint64Array","i","sort","madIdx","mad","q1Idx","q3Idx","q1","q3","iqr","ciLower","ciUpper","p","slice","idx","min","prev","next"],"mappings":"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"}
|