@flemist/test-variants 5.0.2 → 5.0.4

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.
@@ -0,0 +1,1029 @@
1
+ import { timeControllerDefault as Q } from "@flemist/time-controller";
2
+ import { formatAny as z, deepCloneJsonLike as Je } from "@flemist/simple-utils";
3
+ import { isPromiseLike as M, waitMicrotasks as Xe, combineAbortSignals as ie } from "@flemist/async-utils";
4
+ import { AbortError as Ze, AbortControllerFast as se } from "@flemist/abort-controller-fast";
5
+ import { poolWait as ae, Pool as Ke } from "@flemist/time-limits";
6
+ function Y() {
7
+ if (typeof process < "u" && process.memoryUsage)
8
+ try {
9
+ return process.memoryUsage().heapUsed;
10
+ } catch {
11
+ }
12
+ if (typeof performance < "u") {
13
+ const e = performance.memory;
14
+ if (e)
15
+ try {
16
+ return e.usedJSHeapSize;
17
+ } catch {
18
+ }
19
+ }
20
+ return null;
21
+ }
22
+ const Qe = 1e3, q = [];
23
+ function Ye(e) {
24
+ return z(e, { pretty: !0, maxDepth: 5, maxItems: 50 });
25
+ }
26
+ function et(...e) {
27
+ const n = e.map((t) => typeof t == "string" ? t : Ye(t)).join(" ");
28
+ q.push(n), q.length > Qe && q.shift(), console.log(n);
29
+ }
30
+ function tt() {
31
+ return q.join(`
32
+ `);
33
+ }
34
+ globalThis.__getStressTestLogLast = tt;
35
+ const me = (e, n) => {
36
+ et(n);
37
+ }, x = {
38
+ start: !0,
39
+ progress: 5e3,
40
+ completed: !0,
41
+ error: !0,
42
+ modeChange: !0,
43
+ debug: !1,
44
+ func: me
45
+ }, rt = {
46
+ start: !1,
47
+ progress: !1,
48
+ completed: !1,
49
+ error: !1,
50
+ modeChange: !1,
51
+ debug: !1,
52
+ func: me
53
+ };
54
+ function ge(e) {
55
+ return e === !1 ? rt : e === !0 || !e ? x : {
56
+ start: e.start ?? x.start,
57
+ progress: e.progress ?? x.progress,
58
+ completed: e.completed ?? x.completed,
59
+ error: e.error ?? x.error,
60
+ modeChange: e.modeChange ?? x.modeChange,
61
+ debug: e.debug ?? x.debug,
62
+ func: e.func ?? x.func
63
+ };
64
+ }
65
+ function nt(e, n) {
66
+ const t = e.now();
67
+ return {
68
+ startTime: t,
69
+ startMemory: n,
70
+ debugMode: !1,
71
+ tests: 0,
72
+ iterations: 0,
73
+ iterationsAsync: 0,
74
+ prevLogTime: t,
75
+ prevLogMemory: n,
76
+ pendingModeChange: null,
77
+ prevGcTime: t,
78
+ prevGcIterations: 0,
79
+ prevGcIterationsAsync: 0
80
+ };
81
+ }
82
+ class T extends Ze {
83
+ }
84
+ const ot = 50, it = 5;
85
+ function le(e, n) {
86
+ return typeof e == "number" ? { iterationsAsync: 0, iterationsSync: e } : e != null && typeof e == "object" ? e : n ? { iterationsAsync: 1, iterationsSync: 0 } : { iterationsAsync: 0, iterationsSync: 1 };
87
+ }
88
+ function st(e, n) {
89
+ const t = n.log, i = n.pauseDebuggerOnError ?? !0;
90
+ let o = null, a = 0;
91
+ function r(l, u, f) {
92
+ o == null && (o = { error: l, args: u, tests: f }, t.error && t.func(
93
+ "error",
94
+ `[test-variants] error variant: ${z(u, { pretty: !0 })}
95
+ tests: ${f}
96
+ ${z(l)}`
97
+ ));
98
+ const d = Date.now();
99
+ if (i && Function("debugger")(), Date.now() - d > ot && a < it) {
100
+ t.func(
101
+ "debug",
102
+ `[test-variants] debug iteration: ${a}`
103
+ ), a++;
104
+ return;
105
+ }
106
+ const y = o;
107
+ throw o = null, n.onError && n.onError(y), y.error;
108
+ }
109
+ return function(u, f, d) {
110
+ try {
111
+ const h = e(u, d);
112
+ return M(h) ? h.then(
113
+ (y) => le(y, !0),
114
+ (y) => r(y, u, f)
115
+ ) : le(h, !1);
116
+ } catch (h) {
117
+ return h instanceof T ? void 0 : r(h, u, f);
118
+ }
119
+ };
120
+ }
121
+ function U(e, n, t) {
122
+ for (let i = 0, o = e.length; i < o; i++)
123
+ if (t ? t(e[i], n) : e[i] === n)
124
+ return i;
125
+ return -1;
126
+ }
127
+ function ue(e, n, t, i) {
128
+ const o = Object.keys(e.templates), a = {}, r = [], l = [], u = [], f = o.length;
129
+ for (let d = 0; d < f; d++) {
130
+ const h = o[d];
131
+ a[h] = void 0, r.push(-1), l.push(void 0), u.push(null);
132
+ }
133
+ return {
134
+ args: a,
135
+ argsNames: o,
136
+ indexes: r,
137
+ argValues: l,
138
+ argLimits: u,
139
+ attempts: 0,
140
+ templates: e,
141
+ limitArgOnError: t,
142
+ equals: n,
143
+ includeErrorVariant: i ?? !1
144
+ };
145
+ }
146
+ function O(e, n) {
147
+ const t = e.templates.templates[n], i = e.templates.extra[n];
148
+ let o;
149
+ if (typeof t == "function" ? o = t(e.args) : o = t, i == null)
150
+ return o;
151
+ let a = null;
152
+ const r = i.length;
153
+ for (let l = 0; l < r; l++) {
154
+ const u = i[l];
155
+ U(o, u, e.equals) < 0 && (a == null ? a = [...o, u] : a.push(u));
156
+ }
157
+ return a ?? o;
158
+ }
159
+ function w(e, n, t) {
160
+ const i = e.argValues[n].length;
161
+ if (i === 0)
162
+ return -1;
163
+ const o = e.argLimits[n];
164
+ if (o == null)
165
+ return i - 1;
166
+ let a = e.limitArgOnError;
167
+ if (typeof a == "function") {
168
+ const r = e.argsNames[n];
169
+ a = a({
170
+ name: r,
171
+ values: e.argValues[n],
172
+ maxValueIndex: o
173
+ });
174
+ }
175
+ return !t || a ? Math.min(o, i - 1) : i - 1;
176
+ }
177
+ function V(e) {
178
+ const n = e.indexes.length;
179
+ for (let t = 0; t < n; t++) {
180
+ const i = e.argLimits[t];
181
+ if (i == null)
182
+ return !1;
183
+ const o = e.indexes[t];
184
+ if (o > i)
185
+ return !0;
186
+ if (o < i)
187
+ return !1;
188
+ }
189
+ return !e.includeErrorVariant;
190
+ }
191
+ function C(e) {
192
+ const n = e.indexes.length;
193
+ for (let t = 0; t < n; t++)
194
+ e.indexes[t] = -1, e.argValues[t] = void 0, e.args[e.argsNames[t]] = void 0;
195
+ }
196
+ function pe(e) {
197
+ let n = !1, t = !0;
198
+ const i = e.indexes.length;
199
+ let o = i, a = !1, r = 0;
200
+ for (; r < i; r++) {
201
+ const l = e.argValues[r] == null;
202
+ (l || a) && (l && (n = !0), e.argValues[r] = O(
203
+ e,
204
+ e.argsNames[r]
205
+ ));
206
+ const u = w(
207
+ e,
208
+ r,
209
+ r > o
210
+ );
211
+ if (u < 0) {
212
+ t = !1, e.indexes[r] = -1;
213
+ break;
214
+ }
215
+ l && (e.indexes[r] = 0, e.args[e.argsNames[r]] = e.argValues[r][0]), (a || e.indexes[r] > u) && (e.indexes[r] = u, e.args[e.argsNames[r]] = e.argValues[r][u], a = !0), o === i && e.indexes[r] < u && (o = r);
216
+ }
217
+ if (V(e))
218
+ return C(e), !1;
219
+ if (n && t)
220
+ return !0;
221
+ for (r--; r >= 0; r--) {
222
+ if (e.argValues[r] == null)
223
+ continue;
224
+ let l = r > o;
225
+ const u = w(e, r, l), f = e.indexes[r] + 1;
226
+ if (f <= u) {
227
+ e.indexes[r] = f, e.args[e.argsNames[r]] = e.argValues[r][f], f < u && (l = !0);
228
+ for (let d = r + 1; d < i; d++)
229
+ e.args[e.argsNames[d]] = void 0;
230
+ for (r++; r < i; r++) {
231
+ e.argValues[r] = O(
232
+ e,
233
+ e.argsNames[r]
234
+ );
235
+ const d = w(e, r, l);
236
+ if (d < 0)
237
+ break;
238
+ e.indexes[r] = 0, e.args[e.argsNames[r]] = e.argValues[r][0], d > 0 && (l = !0);
239
+ }
240
+ if (r >= i)
241
+ return V(e) ? (C(e), !1) : !0;
242
+ }
243
+ }
244
+ return C(e), !1;
245
+ }
246
+ function H(e) {
247
+ V(e) && C(e);
248
+ let n = !1, t = !0;
249
+ const i = e.indexes.length;
250
+ let o = i, a = !1, r = 0;
251
+ for (; r < i; r++) {
252
+ const l = e.argValues[r] == null;
253
+ (l || a) && (l && (n = !0), e.argValues[r] = O(
254
+ e,
255
+ e.argsNames[r]
256
+ ));
257
+ const u = w(
258
+ e,
259
+ r,
260
+ r > o
261
+ );
262
+ if (u < 0) {
263
+ t = !1, e.indexes[r] = -1;
264
+ break;
265
+ }
266
+ l && (e.indexes[r] = u, e.args[e.argsNames[r]] = e.argValues[r][u]), (a || e.indexes[r] > u) && (e.indexes[r] = u, e.args[e.argsNames[r]] = e.argValues[r][u], a = !0), o === i && e.indexes[r] < u && (o = r);
267
+ }
268
+ if ((n || a) && t && !V(e))
269
+ return !0;
270
+ for (r--; r >= 0; r--) {
271
+ if (e.argValues[r] == null)
272
+ continue;
273
+ let l = r > o;
274
+ const u = w(e, r, l);
275
+ let f = e.indexes[r] - 1;
276
+ if (f > u && (f = u), f >= 0) {
277
+ e.indexes[r] = f, e.args[e.argsNames[r]] = e.argValues[r][f], f < u && (l = !0);
278
+ for (let d = r + 1; d < i; d++)
279
+ e.args[e.argsNames[d]] = void 0;
280
+ for (r++; r < i; r++) {
281
+ e.argValues[r] = O(
282
+ e,
283
+ e.argsNames[r]
284
+ );
285
+ const d = w(e, r, l);
286
+ if (d < 0)
287
+ break;
288
+ e.indexes[r] = d, e.args[e.argsNames[r]] = e.argValues[r][d], d > 0 && (l = !0);
289
+ }
290
+ if (r >= i)
291
+ return !0;
292
+ }
293
+ }
294
+ return C(e), !1;
295
+ }
296
+ function at(e, n) {
297
+ C(e);
298
+ const t = e.argsNames, i = t.length;
299
+ let o = !1;
300
+ for (let a = 0; a < i; a++) {
301
+ const r = t[a], l = n[r];
302
+ if (l === void 0)
303
+ return null;
304
+ e.argValues[a] = O(e, r);
305
+ const u = w(e, a, o);
306
+ if (u < 0)
307
+ return null;
308
+ const f = U(
309
+ e.argValues[a],
310
+ l,
311
+ e.equals
312
+ );
313
+ if (f < 0 || f > u)
314
+ return null;
315
+ e.indexes[a] = f, e.args[e.argsNames[a]] = e.argValues[a][f], e.indexes[a] < u && (o = !0);
316
+ }
317
+ return V(e) ? null : e.indexes.slice();
318
+ }
319
+ function lt(e) {
320
+ const n = e.indexes.length;
321
+ if (n === 0)
322
+ return !1;
323
+ let t = !1;
324
+ for (let i = 0; i < n; i++) {
325
+ e.argValues[i] = O(e, e.argsNames[i]);
326
+ const o = w(e, i, t);
327
+ if (o < 0)
328
+ return Math.random() < 0.5 ? pe(e) : H(e);
329
+ e.indexes[i] = Math.floor(Math.random() * (o + 1)), e.args[e.argsNames[i]] = e.argValues[i][e.indexes[i]], e.indexes[i] < o && (t = !0);
330
+ }
331
+ return V(e) ? H(e) : !0;
332
+ }
333
+ function _(e) {
334
+ return e.mode === "forward" || e.mode === "backward";
335
+ }
336
+ function ut(e, n, t, i) {
337
+ const o = n[t], a = e.templates[t];
338
+ if (typeof a != "function") {
339
+ if (U(a, o, i) >= 0)
340
+ return;
341
+ a.push(o);
342
+ return;
343
+ }
344
+ const r = e.extra[t];
345
+ if (r == null) {
346
+ e.extra[t] = [o];
347
+ return;
348
+ }
349
+ U(r, o, i) >= 0 || r.push(o);
350
+ }
351
+ function ct(e, n, t) {
352
+ for (const i in n)
353
+ if (Object.prototype.hasOwnProperty.call(n, i)) {
354
+ if (i === "seed")
355
+ continue;
356
+ ut(e, n, i, t);
357
+ }
358
+ }
359
+ function ce(e, n) {
360
+ for (const t in n)
361
+ if (Object.prototype.hasOwnProperty.call(n, t)) {
362
+ if (t === "seed")
363
+ continue;
364
+ if (!e[t])
365
+ return !1;
366
+ }
367
+ return !0;
368
+ }
369
+ const ft = [{ mode: "forward" }];
370
+ function dt(e) {
371
+ const {
372
+ argsTemplates: n,
373
+ equals: t,
374
+ limitArgOnError: i,
375
+ includeErrorVariant: o,
376
+ getSeed: a,
377
+ iterationModes: r,
378
+ onModeChange: l,
379
+ limitCompletionCount: u,
380
+ limitTests: f,
381
+ limitTime: d
382
+ } = e, h = e.timeController ?? Q, y = {
383
+ templates: Je(n),
384
+ extra: {}
385
+ }, p = r == null || r.length === 0 ? ft : r, b = [];
386
+ let E = null, L = null, g = 0, S = 0, I = !1, P = 0;
387
+ function $() {
388
+ I || (I = !0, P = h.now(), Se(), g = 0, re(), we());
389
+ }
390
+ function Se() {
391
+ for (let s = 0, c = p.length; s < c; s++)
392
+ b.push(xe());
393
+ }
394
+ function xe() {
395
+ return {
396
+ navigationState: ue(
397
+ y,
398
+ t ?? null,
399
+ i ?? null,
400
+ o ?? null
401
+ ),
402
+ cycleCount: 0,
403
+ completedCount: 0,
404
+ testsInLastTurn: 0,
405
+ tryNextVariantAttempts: 0,
406
+ startTime: null
407
+ };
408
+ }
409
+ function we() {
410
+ E = ue(
411
+ y,
412
+ t ?? null,
413
+ // Initial values; overwritten in calcIndexes before each use
414
+ !1,
415
+ !1
416
+ );
417
+ }
418
+ function re() {
419
+ l?.({
420
+ mode: p[g],
421
+ modeIndex: g,
422
+ tests: S
423
+ });
424
+ }
425
+ function Me(s) {
426
+ $(), ce(y.templates, s) && ct(y, s, t);
427
+ }
428
+ function ne(s, c) {
429
+ return $(), ce(y.templates, s) ? (E.limitArgOnError = c?.limitArg ?? i ?? null, E.includeErrorVariant = c?.includeLimit ?? o ?? !1, at(E, s)) : null;
430
+ }
431
+ function Te(s) {
432
+ const c = s?.args;
433
+ if (c == null)
434
+ return;
435
+ $();
436
+ const m = ne(c);
437
+ if (m != null) {
438
+ L = {
439
+ args: c,
440
+ error: s?.error,
441
+ tests: s?.tests ?? S
442
+ }, E.argLimits = m;
443
+ for (let v = 0, D = b.length; v < D; v++) {
444
+ const j = b[v].navigationState;
445
+ j.argLimits = m;
446
+ }
447
+ }
448
+ }
449
+ function Ve() {
450
+ return $(), Ie();
451
+ }
452
+ function Ie() {
453
+ for (; ; ) {
454
+ if (!Ae())
455
+ return null;
456
+ for (; ; ) {
457
+ const s = qe();
458
+ if (s != null)
459
+ return b[g].testsInLastTurn++, S++, s;
460
+ if ($e()) {
461
+ if (!Ge())
462
+ return null;
463
+ _e();
464
+ break;
465
+ }
466
+ }
467
+ }
468
+ }
469
+ function Ae() {
470
+ return !(Ce() || Oe() || G() && (Le() || !Ne()) || !Pe());
471
+ }
472
+ function Ce() {
473
+ return f != null && S >= f;
474
+ }
475
+ function Oe() {
476
+ return d != null && h.now() - P >= d;
477
+ }
478
+ function Le() {
479
+ if (!G())
480
+ throw new Error("Unexpected behavior");
481
+ return u != null && u <= 0;
482
+ }
483
+ function Ne() {
484
+ if (!G())
485
+ throw new Error("Unexpected behavior");
486
+ for (let s = 0, c = p.length; s < c; s++)
487
+ if (A(p[s]) && k(s))
488
+ return !0;
489
+ return !1;
490
+ }
491
+ function Pe() {
492
+ for (let s = 0, c = p.length; s < c; s++)
493
+ if (k(s))
494
+ return !0;
495
+ return !1;
496
+ }
497
+ function $e() {
498
+ g++;
499
+ const s = g >= p.length;
500
+ return s && (g = 0), re(), s;
501
+ }
502
+ function Ge() {
503
+ if (G()) {
504
+ const s = De();
505
+ if (u != null && s >= u)
506
+ return !1;
507
+ }
508
+ return !0;
509
+ }
510
+ function G() {
511
+ for (let s = 0, c = p.length; s < c; s++)
512
+ if (_(p[s]))
513
+ return !0;
514
+ return !1;
515
+ }
516
+ function De() {
517
+ let s = !1, c = 1 / 0;
518
+ for (let m = 0, v = b.length; m < v; m++) {
519
+ const D = b[m], j = p[m];
520
+ _(j) && (s = !0, k(m) && D.completedCount < c && (c = D.completedCount));
521
+ }
522
+ if (!s)
523
+ throw new Error("Unexpected behavior");
524
+ return c;
525
+ }
526
+ function k(s) {
527
+ const c = p[s], m = b[s];
528
+ return c.limitTests != null && c.limitTests <= 0 || A(c) && (c.cycles != null && c.cycles <= 0 || c.attemptsPerVariant != null && c.attemptsPerVariant <= 0) ? !1 : m.tryNextVariantAttempts < 2;
529
+ }
530
+ function _e() {
531
+ g = 0;
532
+ for (let s = 0, c = b.length; s < c; s++) {
533
+ const m = b[s];
534
+ m.testsInLastTurn = 0, m.startTime = null;
535
+ }
536
+ }
537
+ function qe() {
538
+ let s = 0;
539
+ for (; s < 2; ) {
540
+ if (!Ue())
541
+ return null;
542
+ const c = je();
543
+ if (c != null)
544
+ return c;
545
+ if (A(p[g]) && Fe())
546
+ return null;
547
+ s++;
548
+ }
549
+ return null;
550
+ }
551
+ function Ue() {
552
+ const s = p[g];
553
+ return !(Be() || Re() || A(s) && !ke(g));
554
+ }
555
+ function Be() {
556
+ const s = p[g], c = b[g];
557
+ return s.limitTests != null && c.testsInLastTurn >= s.limitTests;
558
+ }
559
+ function Re() {
560
+ const s = p[g], c = b[g];
561
+ return s.limitTime != null && c.startTime != null && h.now() - c.startTime >= s.limitTime;
562
+ }
563
+ function A(s) {
564
+ return _(s);
565
+ }
566
+ function ke(s) {
567
+ const c = p[s], m = b[s];
568
+ if (!A(c))
569
+ throw new Error("Unexpected behavior");
570
+ return m.cycleCount < (c.cycles ?? 1);
571
+ }
572
+ function Fe() {
573
+ const s = p[g], c = b[g];
574
+ if (!A(s))
575
+ throw new Error("Unexpected behavior");
576
+ return c.cycleCount++, c.cycleCount >= (s.cycles ?? 1) ? (c.cycleCount = 0, c.completedCount++, !0) : !1;
577
+ }
578
+ function je() {
579
+ const s = p[g], c = b[g], m = c.navigationState;
580
+ if (N(s)) {
581
+ if (F())
582
+ return null;
583
+ const v = We();
584
+ if (v != null)
585
+ return c.startTime == null && (c.startTime = h.now()), v;
586
+ }
587
+ return He() ? (c.tryNextVariantAttempts = 0, N(s) && ze(), c.startTime == null && (c.startTime = h.now()), oe(m.args)) : (c.tryNextVariantAttempts++, null);
588
+ }
589
+ function We() {
590
+ const s = p[g], m = b[g].navigationState;
591
+ if (!N(s))
592
+ throw new Error("Unexpected behavior");
593
+ if (F())
594
+ throw new Error("Unexpected behavior");
595
+ const v = s.attemptsPerVariant ?? 1;
596
+ return m.attempts > 0 && m.attempts < v ? V(m) ? null : (m.attempts++, oe(m.args)) : null;
597
+ }
598
+ function ze() {
599
+ const s = p[g], m = b[g].navigationState;
600
+ if (!N(s))
601
+ throw new Error("Unexpected behavior");
602
+ if (F())
603
+ throw new Error("Unexpected behavior");
604
+ m.attempts = 1;
605
+ }
606
+ function N(s) {
607
+ return _(s);
608
+ }
609
+ function F() {
610
+ const s = p[g];
611
+ if (!N(s))
612
+ throw new Error("Unexpected behavior");
613
+ return (s.attemptsPerVariant ?? 1) <= 0;
614
+ }
615
+ function He() {
616
+ const s = p[g], m = b[g].navigationState;
617
+ switch (s.mode) {
618
+ case "forward":
619
+ return pe(m);
620
+ case "backward":
621
+ return H(m);
622
+ case "random":
623
+ return lt(m);
624
+ default:
625
+ throw new Error(`Unknown mode: ${s.mode}`);
626
+ }
627
+ }
628
+ function oe(s) {
629
+ const c = { ...s };
630
+ return a != null && (c.seed = a({ tests: S })), c;
631
+ }
632
+ return {
633
+ get limit() {
634
+ return L;
635
+ },
636
+ get modeIndex() {
637
+ return g;
638
+ },
639
+ get modeConfigs() {
640
+ return p;
641
+ },
642
+ get modeStates() {
643
+ return b;
644
+ },
645
+ get tests() {
646
+ return S;
647
+ },
648
+ calcIndexes: ne,
649
+ extendTemplates: Me,
650
+ addLimit: Te,
651
+ next: Ve
652
+ };
653
+ }
654
+ function ee(e) {
655
+ if (e == null || e <= 0)
656
+ throw new Error(`Iterations = ${e}`);
657
+ e--;
658
+ const n = Xe().then(() => e);
659
+ return e <= 0 ? n : n.then(ee);
660
+ }
661
+ function mt(e, n, t) {
662
+ const i = n.limit ? {
663
+ error: n.limit.error,
664
+ args: n.limit.args,
665
+ tests: n.limit.tests
666
+ } : null;
667
+ if (i && !t)
668
+ throw i.error;
669
+ return {
670
+ iterations: e.iterations,
671
+ bestError: i
672
+ };
673
+ }
674
+ const fe = 2 ** 31;
675
+ function gt(e) {
676
+ if (e == null)
677
+ return { parallel: 1, sequentialOnError: !1 };
678
+ if (typeof e == "boolean")
679
+ return {
680
+ parallel: e ? fe : 1,
681
+ sequentialOnError: !1
682
+ };
683
+ if (typeof e == "number")
684
+ return { parallel: e > 0 ? e : 1, sequentialOnError: !1 };
685
+ const n = e.count;
686
+ let t = 1;
687
+ return n === !0 ? t = fe : typeof n == "number" && n > 0 && (t = n), {
688
+ parallel: t,
689
+ sequentialOnError: e.sequentialOnError ?? !1
690
+ };
691
+ }
692
+ function pt(e) {
693
+ const n = e?.saveErrorVariants, t = n && e.createSaveErrorVariantsStore ? e.createSaveErrorVariantsStore(n) : null, i = e?.findBestError, { parallel: o, sequentialOnError: a } = gt(
694
+ e?.parallel
695
+ );
696
+ return {
697
+ store: t,
698
+ GC_Iterations: e?.GC_Iterations ?? 1e6,
699
+ GC_IterationsAsync: e?.GC_IterationsAsync ?? 1e4,
700
+ GC_Interval: e?.GC_Interval ?? 1e3,
701
+ logOptions: ge(e?.log),
702
+ abortSignalExternal: e?.abortSignal,
703
+ findBestError: i,
704
+ dontThrowIfError: i?.dontThrowIfError,
705
+ timeController: e?.timeController ?? Q,
706
+ parallel: o,
707
+ sequentialOnError: a
708
+ };
709
+ }
710
+ function B(e, n, t) {
711
+ const { options: i, variantsIterator: o } = e, a = o.limit?.args ?? n;
712
+ if (!i.store)
713
+ return;
714
+ const r = i.store.save(a);
715
+ if (t)
716
+ return r;
717
+ }
718
+ function ht(e, n, t, i) {
719
+ const { abortControllerParallel: o, state: a, options: r } = e, { logOptions: l } = r;
720
+ if (e.options.findBestError)
721
+ e.variantsIterator.addLimit({ args: n, error: t, tests: i }), a.debugMode = !1, B(e, n, !1), r.sequentialOnError && !o.signal.aborted ? (l.debug && l.func(
722
+ "debug",
723
+ "[test-variants] sequentialOnError: aborting parallel, switching to sequential"
724
+ ), o.abort(new T())) : l.debug && l.func(
725
+ "debug",
726
+ "[test-variants] parallel error in findBestError mode, continuing with new limits"
727
+ );
728
+ else {
729
+ if (o.signal.aborted)
730
+ return;
731
+ B(e, n, !1), o.abort(t);
732
+ }
733
+ }
734
+ function de(e, n, t, i) {
735
+ const { state: o } = e;
736
+ if (e.options.findBestError) {
737
+ e.variantsIterator.addLimit({ args: n, error: t, tests: i });
738
+ const r = B(e, n, !0);
739
+ if (r)
740
+ return r.then(() => {
741
+ o.debugMode = !1;
742
+ });
743
+ o.debugMode = !1;
744
+ return;
745
+ }
746
+ const a = B(e, n, !0);
747
+ if (a)
748
+ return a.then(() => {
749
+ throw t;
750
+ });
751
+ throw t;
752
+ }
753
+ function bt(e, n) {
754
+ const { GC_Iterations: t, GC_IterationsAsync: i, GC_Interval: o } = e.options;
755
+ return t > 0 && e.state.iterations - e.state.prevGcIterations >= t || i > 0 && e.state.iterationsAsync - e.state.prevGcIterationsAsync >= i || o > 0 && n - e.state.prevGcTime >= o;
756
+ }
757
+ async function yt(e, n) {
758
+ e.prevGcIterations = e.iterations, e.prevGcIterationsAsync = e.iterationsAsync, e.prevGcTime = n, await ee(1);
759
+ }
760
+ function te(e) {
761
+ const n = e / 1e3;
762
+ if (n < 60)
763
+ return `${n.toFixed(1)}s`;
764
+ const t = n / 60;
765
+ return t < 60 ? `${t.toFixed(1)}m` : `${(t / 60).toFixed(1)}h`;
766
+ }
767
+ function J(e) {
768
+ const n = e / 1073741824;
769
+ if (n >= 1)
770
+ return n >= 10 ? `${Math.round(n)}GB` : `${n.toFixed(1)}GB`;
771
+ const t = e / (1024 * 1024);
772
+ return t >= 10 ? `${Math.round(t)}MB` : `${t.toFixed(1)}MB`;
773
+ }
774
+ function vt(e, n) {
775
+ if (!e)
776
+ return `mode[${n}]: null`;
777
+ let t = `mode[${n}]: ${e.mode}`;
778
+ return (e.mode === "forward" || e.mode === "backward") && (e.cycles != null && (t += `, cycles=${e.cycles}`), e.attemptsPerVariant != null && (t += `, attempts=${e.attemptsPerVariant}`)), e.limitTime != null && (t += `, limitTime=${te(e.limitTime)}`), e.limitTests != null && (t += `, limitTests=${e.limitTests}`), t;
779
+ }
780
+ function he(e, n) {
781
+ const t = e - n, i = t >= 0 ? "+" : "";
782
+ return `${J(e)} (${i}${J(t)})`;
783
+ }
784
+ function Et(e, n) {
785
+ if (!e.start)
786
+ return;
787
+ let t = "[test-variants] start";
788
+ n != null && (t += `, memory: ${J(n)}`), e.func("start", t);
789
+ }
790
+ function St(e) {
791
+ const { options: n, state: t } = e, { logOptions: i, timeController: o } = n;
792
+ if (!i.completed)
793
+ return;
794
+ const a = o.now() - t.startTime;
795
+ let r = `[test-variants] end, tests: ${t.tests} (${te(a)}), async: ${t.iterationsAsync}`;
796
+ if (t.startMemory != null) {
797
+ const l = Y();
798
+ l != null && (r += `, memory: ${he(l, t.startMemory)}`);
799
+ }
800
+ i.func("completed", r);
801
+ }
802
+ function be(e) {
803
+ const { options: n, state: t } = e, { logOptions: i } = n, o = t.pendingModeChange;
804
+ !i.modeChange || o == null || (i.func(
805
+ "modeChange",
806
+ `[test-variants] ${vt(o.mode, o.modeIndex)}`
807
+ ), t.pendingModeChange = null);
808
+ }
809
+ function xt(e) {
810
+ const { options: n, state: t } = e, { logOptions: i, timeController: o } = n, a = o.now();
811
+ if (!i.progress || a - t.prevLogTime < i.progress)
812
+ return !1;
813
+ be(e);
814
+ const r = a - t.startTime;
815
+ let l = `[test-variants] tests: ${t.tests} (${te(r)}), async: ${t.iterationsAsync}`;
816
+ if (t.prevLogMemory != null) {
817
+ const u = Y();
818
+ u != null && (l += `, memory: ${he(u, t.prevLogMemory)}`, t.prevLogMemory = u);
819
+ }
820
+ return i.func("progress", l), t.prevLogTime = a, !0;
821
+ }
822
+ function X(e, n) {
823
+ e.debugMode = !1, n && (e.iterationsAsync += n.iterationsAsync, e.iterations += n.iterationsSync + n.iterationsAsync);
824
+ }
825
+ function Z(e) {
826
+ e.state.debugMode = !0, e.abortControllerParallel.abort(new T());
827
+ }
828
+ function ye(e, n) {
829
+ const { testRun: t, testOptions: i, state: o } = e, a = o.tests;
830
+ o.tests++;
831
+ try {
832
+ const r = t(n, a, i);
833
+ if (M(r))
834
+ return r.then(
835
+ (l) => {
836
+ if (!l) {
837
+ Z(e);
838
+ return;
839
+ }
840
+ X(o, l);
841
+ },
842
+ (l) => de(e, n, l, a)
843
+ );
844
+ if (!r) {
845
+ Z(e);
846
+ return;
847
+ }
848
+ X(o, r);
849
+ } catch (r) {
850
+ return r instanceof T ? void 0 : de(e, n, r, a);
851
+ }
852
+ }
853
+ function wt(e, n) {
854
+ const { pool: t, abortSignal: i, testRun: o, testOptionsParallel: a, state: r } = e;
855
+ if (!t)
856
+ return;
857
+ const l = r.tests;
858
+ r.tests++, (async () => {
859
+ try {
860
+ if (i.aborted)
861
+ return;
862
+ let u = o(n, l, a);
863
+ if (M(u) && (u = await u), !u) {
864
+ Z(e);
865
+ return;
866
+ }
867
+ X(r, u);
868
+ } catch (u) {
869
+ if (u instanceof T)
870
+ return;
871
+ ht(e, n, u, l);
872
+ } finally {
873
+ t.release(1);
874
+ }
875
+ })();
876
+ }
877
+ function ve(e) {
878
+ const { options: n, state: t } = e, { logOptions: i, timeController: o, GC_Interval: a } = n;
879
+ if (!i.progress && !a)
880
+ return;
881
+ xt(e);
882
+ const r = o.now();
883
+ if (bt(e, r))
884
+ return yt(t, r);
885
+ }
886
+ function R(e) {
887
+ return e.options.abortSignalExternal?.aborted ?? !1;
888
+ }
889
+ function K(e) {
890
+ return e.abortSignal.aborted;
891
+ }
892
+ function Ee(e, n) {
893
+ return e.state.debugMode ? n : e.variantsIterator.next();
894
+ }
895
+ async function W(e, n) {
896
+ const { pool: t, state: i, options: o } = e, { parallel: a, logOptions: r } = o;
897
+ let l = n ?? null;
898
+ for (; !R(e); ) {
899
+ const u = t && !K(e);
900
+ let f = !1;
901
+ u && (t.hold(1) || await ae({ pool: t, count: 1, hold: !0 }), f = !0);
902
+ try {
903
+ if (l == null && (l = Ee(e, l), l == null))
904
+ break;
905
+ const d = ve(e);
906
+ if (M(d) && await d, R(e)) {
907
+ l = null;
908
+ continue;
909
+ }
910
+ if (u)
911
+ wt(e, l), f = !1;
912
+ else {
913
+ r.debug && t && K(e) && r.func(
914
+ "debug",
915
+ `[test-variants] parallel aborted, running sequential: tests=${i.tests}`
916
+ );
917
+ const h = ye(e, l);
918
+ M(h) && await h;
919
+ }
920
+ l = null;
921
+ } finally {
922
+ f && t.release(1);
923
+ }
924
+ }
925
+ t && (await ae({ pool: t, count: a, hold: !0 }), t.release(a));
926
+ }
927
+ function Mt(e) {
928
+ const { pool: n, state: t, options: i } = e, { logOptions: o } = i;
929
+ if (n)
930
+ return W(e);
931
+ let a = null;
932
+ for (; !R(e) && (a = Ee(e, a), a != null); ) {
933
+ const r = ve(e);
934
+ if (M(r)) {
935
+ const u = a;
936
+ return r.then(() => W(e, u));
937
+ }
938
+ if (R(e))
939
+ continue;
940
+ o.debug && K(e) && o.func(
941
+ "debug",
942
+ `[test-variants] parallel aborted, running sequential: tests=${t.tests}`
943
+ );
944
+ const l = ye(e, a);
945
+ if (M(l))
946
+ return l.then(() => W(e));
947
+ }
948
+ }
949
+ async function Tt(e, n, t, i) {
950
+ const o = pt(i), {
951
+ store: a,
952
+ logOptions: r,
953
+ abortSignalExternal: l,
954
+ findBestError: u,
955
+ dontThrowIfError: f,
956
+ timeController: d,
957
+ parallel: h
958
+ } = o, y = new se(), p = new se(), b = ie(
959
+ l,
960
+ y.signal
961
+ ), E = ie(
962
+ b,
963
+ p.signal
964
+ ), L = {
965
+ abortSignal: b,
966
+ timeController: d
967
+ }, g = {
968
+ abortSignal: E,
969
+ timeController: d
970
+ };
971
+ a && await a.replay({
972
+ testRun: e,
973
+ variantsIterator: n,
974
+ testOptions: L,
975
+ findBestErrorEnabled: !!u
976
+ });
977
+ const S = h <= 1 ? null : new Ke(h);
978
+ Et(r, t.startMemory);
979
+ const I = {
980
+ options: o,
981
+ testRun: e,
982
+ variantsIterator: n,
983
+ testOptions: L,
984
+ testOptionsParallel: g,
985
+ abortControllerGlobal: y,
986
+ abortControllerParallel: p,
987
+ abortSignal: E,
988
+ pool: S,
989
+ state: t
990
+ };
991
+ be(I);
992
+ try {
993
+ await Mt(I), E.throwIfAborted();
994
+ } catch (P) {
995
+ throw y.abort(new T()), P;
996
+ }
997
+ return b.throwIfAborted(), y.abort(new T()), St(I), await ee(1), mt(t, n, f);
998
+ }
999
+ function Nt(e) {
1000
+ return function(t) {
1001
+ return async function(o) {
1002
+ const a = ge(o?.log), r = st(e, {
1003
+ onError: o?.onError,
1004
+ log: a,
1005
+ pauseDebuggerOnError: o?.pauseDebuggerOnError
1006
+ }), l = o?.timeController ?? Q, u = Y(), f = nt(l, u), d = o?.onModeChange;
1007
+ function h(p) {
1008
+ f.pendingModeChange = p, d?.(p);
1009
+ }
1010
+ const y = dt({
1011
+ argsTemplates: t,
1012
+ getSeed: o?.getSeed,
1013
+ iterationModes: o?.iterationModes,
1014
+ equals: o?.findBestError?.equals,
1015
+ limitArgOnError: o?.findBestError?.limitArgOnError,
1016
+ includeErrorVariant: o?.findBestError?.includeErrorVariant,
1017
+ timeController: l,
1018
+ onModeChange: h,
1019
+ limitCompletionCount: o?.cycles ?? 1,
1020
+ limitTests: o?.limitTests,
1021
+ limitTime: o?.limitTime
1022
+ });
1023
+ return Tt(r, y, f, o);
1024
+ };
1025
+ };
1026
+ }
1027
+ export {
1028
+ Nt as c
1029
+ };