@flemist/test-variants 1.0.6 → 2.0.0-alpha

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.
Files changed (31) hide show
  1. package/dist/bundle/browser.js +270 -228
  2. package/dist/lib/index.cjs +6 -2
  3. package/dist/lib/index.d.ts +5 -2
  4. package/dist/lib/index.mjs +6 -2
  5. package/dist/lib/test-variants/argsToString.cjs +17 -0
  6. package/dist/lib/test-variants/argsToString.d.ts +2 -0
  7. package/dist/lib/test-variants/argsToString.mjs +13 -0
  8. package/dist/lib/test-variants/createTestVariants.cjs +68 -189
  9. package/dist/lib/test-variants/createTestVariants.d.ts +8 -30
  10. package/dist/lib/test-variants/createTestVariants.mjs +68 -189
  11. package/dist/lib/test-variants/createTestVariants.perf.cjs +29 -20
  12. package/dist/lib/test-variants/createTestVariants.perf.mjs +29 -20
  13. package/dist/lib/test-variants/prime.cjs +65 -0
  14. package/dist/lib/test-variants/prime.d.ts +3 -0
  15. package/dist/lib/test-variants/prime.mjs +59 -0
  16. package/dist/lib/test-variants/prime.perf.cjs +30 -0
  17. package/dist/lib/test-variants/prime.perf.d.ts +1 -0
  18. package/dist/lib/test-variants/prime.perf.mjs +28 -0
  19. package/dist/lib/test-variants/testVariantsCreateTestRun.cjs +80 -0
  20. package/dist/lib/test-variants/testVariantsCreateTestRun.d.ts +22 -0
  21. package/dist/lib/test-variants/testVariantsCreateTestRun.mjs +76 -0
  22. package/dist/lib/test-variants/testVariantsIterable.cjs +67 -0
  23. package/dist/lib/test-variants/testVariantsIterable.d.ts +12 -0
  24. package/dist/lib/test-variants/testVariantsIterable.mjs +63 -0
  25. package/dist/lib/test-variants/testVariantsRun.cjs +187 -0
  26. package/dist/lib/test-variants/testVariantsRun.d.ts +31 -0
  27. package/dist/lib/test-variants/testVariantsRun.mjs +183 -0
  28. package/dist/lib/test-variants/types.cjs +2 -0
  29. package/dist/lib/test-variants/types.d.ts +1 -0
  30. package/dist/lib/test-variants/types.mjs +1 -0
  31. package/package.json +24 -23
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ function argsToString(args) {
6
+ return JSON.stringify(args, (_, value) => {
7
+ if (value
8
+ && typeof value === 'object'
9
+ && !Array.isArray(value)
10
+ && value.constructor !== Object) {
11
+ return value + '';
12
+ }
13
+ return value;
14
+ }, 2);
15
+ }
16
+
17
+ exports.argsToString = argsToString;
@@ -0,0 +1,2 @@
1
+ import { Obj } from "./types";
2
+ export declare function argsToString(args: Obj): string;
@@ -0,0 +1,13 @@
1
+ function argsToString(args) {
2
+ return JSON.stringify(args, (_, value) => {
3
+ if (value
4
+ && typeof value === 'object'
5
+ && !Array.isArray(value)
6
+ && value.constructor !== Object) {
7
+ return value + '';
8
+ }
9
+ return value;
10
+ }, 2);
11
+ }
12
+
13
+ export { argsToString };
@@ -3,202 +3,81 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var tslib = require('tslib');
6
- var garbageCollect_garbageCollect = require('../garbage-collect/garbageCollect.cjs');
7
- var abortControllerFast = require('@flemist/abort-controller-fast');
8
- var timeLimits = require('@flemist/time-limits');
9
- var asyncUtils = require('@flemist/async-utils');
6
+ var testVariants_testVariantsIterable = require('./testVariantsIterable.cjs');
7
+ var testVariants_testVariantsCreateTestRun = require('./testVariantsCreateTestRun.cjs');
8
+ var testVariants_testVariantsRun = require('./testVariantsRun.cjs');
9
+ require('@flemist/async-utils');
10
+ require('./argsToString.cjs');
11
+ require('@flemist/abort-controller-fast');
12
+ require('@flemist/time-limits');
13
+ require('../garbage-collect/garbageCollect.cjs');
10
14
 
11
- /* eslint-disable @typescript-eslint/no-shadow */
12
- function isPromiseLike(value) {
13
- return typeof value === 'object'
14
- && value
15
- && typeof value.then === 'function';
16
- }
17
15
  function createTestVariants(test) {
18
16
  return function testVariantsArgs(args) {
19
- return function testVariantsCall({ GC_Iterations = 1000000, GC_IterationsAsync = 10000, GC_Interval = 1000, logInterval = 5000, logCompleted = true, onError: onErrorCallback = null, abortSignal: abortSignalExternal = null, parallel: _parallel, } = {}) {
20
- const abortControllerParallel = new abortControllerFast.AbortControllerFast();
21
- const abortSignalParallel = asyncUtils.combineAbortSignals(abortSignalExternal, abortControllerParallel.signal);
22
- const abortSignalAll = abortSignalParallel;
23
- const argsKeys = Object.keys(args);
24
- const argsValues = Object.values(args);
25
- const argsLength = argsKeys.length;
26
- const variantArgs = {};
27
- function getArgValues(nArg) {
28
- let argValues = argsValues[nArg];
29
- if (typeof argValues === 'function') {
30
- argValues = argValues(variantArgs);
31
- }
32
- return argValues;
33
- }
34
- const indexes = [];
35
- const values = [];
36
- for (let nArg = 0; nArg < argsLength; nArg++) {
37
- indexes[nArg] = -1;
38
- values[nArg] = [];
39
- }
40
- values[0] = getArgValues(0);
41
- function nextVariant() {
42
- for (let nArg = argsLength - 1; nArg >= 0; nArg--) {
43
- const index = indexes[nArg] + 1;
44
- if (index < values[nArg].length) {
45
- indexes[nArg] = index;
46
- variantArgs[argsKeys[nArg]] = values[nArg][index];
47
- for (nArg++; nArg < argsLength; nArg++) {
48
- const argValues = getArgValues(nArg);
49
- if (argValues.length === 0) {
50
- break;
51
- }
52
- indexes[nArg] = 0;
53
- values[nArg] = argValues;
54
- variantArgs[argsKeys[nArg]] = argValues[0];
55
- }
56
- if (nArg >= argsLength) {
57
- return true;
58
- }
59
- }
60
- }
61
- return false;
62
- }
63
- let iterations = 0;
64
- let iterationsAsync = 0;
65
- let debug = false;
66
- let debugIteration = 0;
67
- let isNewError = true;
68
- function onError(error, iterations, variantArgs) {
69
- return tslib.__awaiter(this, void 0, void 0, function* () {
70
- const _isNewError = isNewError;
71
- isNewError = false;
72
- if (_isNewError) {
73
- abortControllerParallel.abort(error);
74
- console.error(`error variant: ${iterations}\r\n${JSON.stringify(variantArgs, (_, value) => {
75
- if (value
76
- && typeof value === 'object'
77
- && !Array.isArray(value)
78
- && value.constructor !== Object) {
79
- return value + '';
80
- }
81
- return value;
82
- }, 2)}`);
83
- console.error(error);
84
- }
85
- // rerun failed variant 5 times for debug
86
- const time0 = Date.now();
87
- // eslint-disable-next-line no-debugger
88
- debugger;
89
- if (Date.now() - time0 > 50 && debugIteration < 5) {
90
- console.log('DEBUG ITERATION: ' + debugIteration);
91
- debug = true;
92
- yield next();
93
- debugIteration++;
94
- }
95
- if (_isNewError) {
96
- if (onErrorCallback) {
97
- onErrorCallback({
98
- iteration: iterations,
99
- variant: variantArgs,
100
- error,
101
- });
102
- }
103
- throw error;
104
- }
105
- });
106
- }
107
- function onCompleted() {
108
- if (logCompleted) {
109
- console.log('variants: ' + iterations);
110
- }
111
- }
112
- let prevLogTime = Date.now();
113
- let prevGC_Time = prevLogTime;
114
- let prevGC_Iterations = iterations;
115
- let prevGC_IterationsAsync = iterationsAsync;
116
- const parallel = _parallel === true
117
- ? Math.pow(2, 31)
118
- : !_parallel || _parallel <= 0
119
- ? 1
120
- : _parallel;
121
- const pool = parallel <= 1
122
- ? null
123
- : new timeLimits.Pool(parallel);
124
- function runTest(_iterations, variantArgs, abortSignal) {
125
- return tslib.__awaiter(this, void 0, void 0, function* () {
126
- try {
127
- const promiseOrIterations = test(variantArgs, abortSignal);
128
- if (isPromiseLike(promiseOrIterations)) {
129
- const value = yield promiseOrIterations;
130
- const newIterations = typeof value === 'number' ? value : 1;
131
- iterationsAsync += newIterations;
132
- iterations += newIterations;
133
- return;
134
- }
135
- iterations += typeof promiseOrIterations === 'number' ? promiseOrIterations : 1;
136
- }
137
- catch (err) {
138
- yield onError(err, _iterations, variantArgs);
139
- }
17
+ return function testVariantsCall(options) {
18
+ return tslib.__awaiter(this, void 0, void 0, function* () {
19
+ const testRun = testVariants_testVariantsCreateTestRun.testVariantsCreateTestRun(test, {
20
+ onError: options === null || options === void 0 ? void 0 : options.onError,
140
21
  });
141
- }
142
- function next() {
143
- return tslib.__awaiter(this, void 0, void 0, function* () {
144
- while (!(abortSignalExternal === null || abortSignalExternal === void 0 ? void 0 : abortSignalExternal.aborted) && (debug || nextVariant())) {
145
- const _iterations = iterations;
146
- const _variantArgs = !pool
147
- ? variantArgs
148
- : Object.assign({}, variantArgs);
149
- const now = (logInterval || GC_Interval) && Date.now();
150
- if (logInterval && now - prevLogTime >= logInterval) {
151
- // the log is required to prevent the karma browserNoActivityTimeout
152
- console.log(iterations);
153
- prevLogTime = now;
154
- }
155
- if (GC_Iterations && iterations - prevGC_Iterations >= GC_Iterations
156
- || GC_IterationsAsync && iterationsAsync - prevGC_IterationsAsync >= GC_IterationsAsync
157
- || GC_Interval && now - prevGC_Time >= GC_Interval) {
158
- prevGC_Iterations = iterations;
159
- prevGC_IterationsAsync = iterationsAsync;
160
- prevGC_Time = now;
161
- yield garbageCollect_garbageCollect.garbageCollect(1);
162
- continue;
163
- }
164
- if (abortSignalExternal === null || abortSignalExternal === void 0 ? void 0 : abortSignalExternal.aborted) {
165
- continue;
166
- }
167
- if (!pool || abortSignalParallel.aborted) {
168
- yield runTest(_iterations, _variantArgs, abortSignalExternal);
169
- }
170
- else {
171
- if (!pool.hold(1)) {
172
- yield pool.holdWait(1);
173
- }
174
- void (() => tslib.__awaiter(this, void 0, void 0, function* () {
175
- try {
176
- if (abortSignalParallel === null || abortSignalParallel === void 0 ? void 0 : abortSignalParallel.aborted) {
177
- return;
178
- }
179
- yield runTest(_iterations, _variantArgs, abortSignalParallel);
180
- }
181
- finally {
182
- void pool.release(1);
183
- }
184
- }))();
185
- }
186
- }
187
- if (pool) {
188
- yield pool.holdWait(parallel);
189
- void pool.release(parallel);
190
- }
191
- if (abortSignalAll === null || abortSignalAll === void 0 ? void 0 : abortSignalAll.aborted) {
192
- throw abortSignalAll.reason;
193
- }
194
- onCompleted();
195
- yield garbageCollect_garbageCollect.garbageCollect(1);
196
- return iterations;
22
+ const variants = testVariants_testVariantsIterable.testVariantsIterable({
23
+ argsTemplates: args,
197
24
  });
198
- }
199
- return next();
25
+ return testVariants_testVariantsRun.testVariantsRun(testRun, variants, options);
26
+ });
200
27
  };
201
28
  };
202
29
  }
30
+ /*
31
+ export class TestVariants<Args extends Obj> {
32
+ private readonly _test: TestVariantsTest<Args>
33
+ test(args: Args, abortSignal: IAbortSignalFast) {
34
+ return this._test(args, abortSignal)
35
+ }
36
+
37
+ constructor(
38
+ test: TestVariantsTest<Args>,
39
+ ) {
40
+ this.test = test
41
+ }
42
+
43
+ createVariants<ArgsExtra extends Obj>(
44
+ argsTemplates: TestVariantsTemplatesExt<Args, ArgsExtra>,
45
+ ): Iterable<Args> {
46
+ return testVariantsIterable<Args, ArgsExtra>(argsTemplates)
47
+ }
48
+
49
+ createTestRun(
50
+ options?: null | TestVariantsCreateTestRunOptions<Args>,
51
+ ) {
52
+ return testVariantsCreateTestRun<Args>(this._test, options)
53
+ }
54
+
55
+ testAll<ArgsExtra extends Obj>(
56
+ argsTemplates: TestVariantsTemplatesExt<Args, ArgsExtra>,
57
+ ): TestVariantsCall<Args>
58
+ testAll(
59
+ variants: Iterable<Args>,
60
+ ): TestVariantsCall<Args>
61
+ testAll<ArgsExtra extends Obj>(
62
+ variantsOrTemplates: Iterable<Args> | TestVariantsTemplatesExt<Args, ArgsExtra>,
63
+ ): TestVariantsCall<Args> {
64
+ const variants = Symbol.iterator in variantsOrTemplates
65
+ ? variantsOrTemplates as Iterable<Args>
66
+ : this.createVariants(variantsOrTemplates as TestVariantsTemplatesExt<Args, ArgsExtra>)
67
+
68
+ const _this = this
69
+
70
+ return function testVariantsCall(
71
+ options?: null | TestVariantsRunOptions & TestVariantsCreateTestRunOptions<Args>,
72
+ ) {
73
+ const testRun = _this.createTestRun({
74
+ onError: options?.onError,
75
+ })
76
+
77
+ return testVariantsRun<Args>(testRun, variants, options)
78
+ }
79
+ }
80
+ }
81
+ */
203
82
 
204
83
  exports.createTestVariants = createTestVariants;
@@ -1,30 +1,8 @@
1
- import { IAbortSignalFast } from '@flemist/abort-controller-fast';
2
- export declare type VariantsArgs<TArgs> = {
3
- [key in keyof TArgs]: TArgs[key][] | ((args: TArgs) => TArgs[key][]);
4
- };
5
- declare type PromiseOrValue<T> = Promise<T> | T;
6
- export declare type TestVariantsCall<TArgs> = (callParams?: TestVariantsCallParams<TArgs>) => PromiseOrValue<number>;
7
- export declare type TestVariantsSetArgs<TArgs> = <TAdditionalArgs>(args: VariantsArgs<{
8
- [key in (keyof TAdditionalArgs | keyof TArgs)]: key extends keyof TArgs ? TArgs[key] : key extends keyof TAdditionalArgs ? TAdditionalArgs[key] : never;
9
- }>) => TestVariantsCall<TArgs>;
10
- export declare type TestVariantsCallParams<TArgs> = {
11
- /** Wait for garbage collection after iterations */
12
- GC_Iterations?: number;
13
- /** Same as GC_Iterations but only for async test variants, required for 10000 and more of Promise rejections */
14
- GC_IterationsAsync?: number;
15
- /** Wait for garbage collection after time interval, required to prevent the karma browserDisconnectTimeout */
16
- GC_Interval?: number;
17
- /** console log current iterations, required to prevent the karma browserNoActivityTimeout */
18
- logInterval?: number;
19
- /** console log iterations on test completed */
20
- logCompleted?: boolean;
21
- onError?: (event: {
22
- iteration: number;
23
- variant: TArgs;
24
- error: any;
25
- }) => void;
26
- abortSignal?: IAbortSignalFast;
27
- parallel?: null | number | boolean;
28
- };
29
- export declare function createTestVariants<TArgs extends object>(test: (args: TArgs, abortSignal: IAbortSignalFast) => Promise<number | void> | number | void): TestVariantsSetArgs<TArgs>;
30
- export {};
1
+ import { type PromiseOrValue } from '@flemist/async-utils';
2
+ import { TestVariantsTemplatesExt } from "./testVariantsIterable";
3
+ import { TestVariantsCreateTestRunOptions, TestVariantsTest } from "./testVariantsCreateTestRun";
4
+ import { TestVariantsRunOptions, TestVariantsRunResult } from "./testVariantsRun";
5
+ import { Obj } from "./types";
6
+ export declare type TestVariantsCall<Args extends Obj> = (options?: null | TestVariantsRunOptions & TestVariantsCreateTestRunOptions<Args>) => PromiseOrValue<TestVariantsRunResult<Args>>;
7
+ export declare type TestVariantsSetArgs<Args extends Obj> = <ArgsExtra extends Obj>(args: TestVariantsTemplatesExt<Omit<Args, 'seed'>, Omit<ArgsExtra, 'seed'>>) => TestVariantsCall<Args>;
8
+ export declare function createTestVariants<Args extends Obj>(test: TestVariantsTest<Args>): TestVariantsSetArgs<Args>;
@@ -1,200 +1,79 @@
1
1
  import { __awaiter } from 'tslib';
2
- import { garbageCollect } from '../garbage-collect/garbageCollect.mjs';
3
- import { AbortControllerFast } from '@flemist/abort-controller-fast';
4
- import { Pool } from '@flemist/time-limits';
5
- import { combineAbortSignals } from '@flemist/async-utils';
2
+ import { testVariantsIterable } from './testVariantsIterable.mjs';
3
+ import { testVariantsCreateTestRun } from './testVariantsCreateTestRun.mjs';
4
+ import { testVariantsRun } from './testVariantsRun.mjs';
5
+ import '@flemist/async-utils';
6
+ import './argsToString.mjs';
7
+ import '@flemist/abort-controller-fast';
8
+ import '@flemist/time-limits';
9
+ import '../garbage-collect/garbageCollect.mjs';
6
10
 
7
- /* eslint-disable @typescript-eslint/no-shadow */
8
- function isPromiseLike(value) {
9
- return typeof value === 'object'
10
- && value
11
- && typeof value.then === 'function';
12
- }
13
11
  function createTestVariants(test) {
14
12
  return function testVariantsArgs(args) {
15
- return function testVariantsCall({ GC_Iterations = 1000000, GC_IterationsAsync = 10000, GC_Interval = 1000, logInterval = 5000, logCompleted = true, onError: onErrorCallback = null, abortSignal: abortSignalExternal = null, parallel: _parallel, } = {}) {
16
- const abortControllerParallel = new AbortControllerFast();
17
- const abortSignalParallel = combineAbortSignals(abortSignalExternal, abortControllerParallel.signal);
18
- const abortSignalAll = abortSignalParallel;
19
- const argsKeys = Object.keys(args);
20
- const argsValues = Object.values(args);
21
- const argsLength = argsKeys.length;
22
- const variantArgs = {};
23
- function getArgValues(nArg) {
24
- let argValues = argsValues[nArg];
25
- if (typeof argValues === 'function') {
26
- argValues = argValues(variantArgs);
27
- }
28
- return argValues;
29
- }
30
- const indexes = [];
31
- const values = [];
32
- for (let nArg = 0; nArg < argsLength; nArg++) {
33
- indexes[nArg] = -1;
34
- values[nArg] = [];
35
- }
36
- values[0] = getArgValues(0);
37
- function nextVariant() {
38
- for (let nArg = argsLength - 1; nArg >= 0; nArg--) {
39
- const index = indexes[nArg] + 1;
40
- if (index < values[nArg].length) {
41
- indexes[nArg] = index;
42
- variantArgs[argsKeys[nArg]] = values[nArg][index];
43
- for (nArg++; nArg < argsLength; nArg++) {
44
- const argValues = getArgValues(nArg);
45
- if (argValues.length === 0) {
46
- break;
47
- }
48
- indexes[nArg] = 0;
49
- values[nArg] = argValues;
50
- variantArgs[argsKeys[nArg]] = argValues[0];
51
- }
52
- if (nArg >= argsLength) {
53
- return true;
54
- }
55
- }
56
- }
57
- return false;
58
- }
59
- let iterations = 0;
60
- let iterationsAsync = 0;
61
- let debug = false;
62
- let debugIteration = 0;
63
- let isNewError = true;
64
- function onError(error, iterations, variantArgs) {
65
- return __awaiter(this, void 0, void 0, function* () {
66
- const _isNewError = isNewError;
67
- isNewError = false;
68
- if (_isNewError) {
69
- abortControllerParallel.abort(error);
70
- console.error(`error variant: ${iterations}\r\n${JSON.stringify(variantArgs, (_, value) => {
71
- if (value
72
- && typeof value === 'object'
73
- && !Array.isArray(value)
74
- && value.constructor !== Object) {
75
- return value + '';
76
- }
77
- return value;
78
- }, 2)}`);
79
- console.error(error);
80
- }
81
- // rerun failed variant 5 times for debug
82
- const time0 = Date.now();
83
- // eslint-disable-next-line no-debugger
84
- debugger;
85
- if (Date.now() - time0 > 50 && debugIteration < 5) {
86
- console.log('DEBUG ITERATION: ' + debugIteration);
87
- debug = true;
88
- yield next();
89
- debugIteration++;
90
- }
91
- if (_isNewError) {
92
- if (onErrorCallback) {
93
- onErrorCallback({
94
- iteration: iterations,
95
- variant: variantArgs,
96
- error,
97
- });
98
- }
99
- throw error;
100
- }
101
- });
102
- }
103
- function onCompleted() {
104
- if (logCompleted) {
105
- console.log('variants: ' + iterations);
106
- }
107
- }
108
- let prevLogTime = Date.now();
109
- let prevGC_Time = prevLogTime;
110
- let prevGC_Iterations = iterations;
111
- let prevGC_IterationsAsync = iterationsAsync;
112
- const parallel = _parallel === true
113
- ? Math.pow(2, 31)
114
- : !_parallel || _parallel <= 0
115
- ? 1
116
- : _parallel;
117
- const pool = parallel <= 1
118
- ? null
119
- : new Pool(parallel);
120
- function runTest(_iterations, variantArgs, abortSignal) {
121
- return __awaiter(this, void 0, void 0, function* () {
122
- try {
123
- const promiseOrIterations = test(variantArgs, abortSignal);
124
- if (isPromiseLike(promiseOrIterations)) {
125
- const value = yield promiseOrIterations;
126
- const newIterations = typeof value === 'number' ? value : 1;
127
- iterationsAsync += newIterations;
128
- iterations += newIterations;
129
- return;
130
- }
131
- iterations += typeof promiseOrIterations === 'number' ? promiseOrIterations : 1;
132
- }
133
- catch (err) {
134
- yield onError(err, _iterations, variantArgs);
135
- }
13
+ return function testVariantsCall(options) {
14
+ return __awaiter(this, void 0, void 0, function* () {
15
+ const testRun = testVariantsCreateTestRun(test, {
16
+ onError: options === null || options === void 0 ? void 0 : options.onError,
136
17
  });
137
- }
138
- function next() {
139
- return __awaiter(this, void 0, void 0, function* () {
140
- while (!(abortSignalExternal === null || abortSignalExternal === void 0 ? void 0 : abortSignalExternal.aborted) && (debug || nextVariant())) {
141
- const _iterations = iterations;
142
- const _variantArgs = !pool
143
- ? variantArgs
144
- : Object.assign({}, variantArgs);
145
- const now = (logInterval || GC_Interval) && Date.now();
146
- if (logInterval && now - prevLogTime >= logInterval) {
147
- // the log is required to prevent the karma browserNoActivityTimeout
148
- console.log(iterations);
149
- prevLogTime = now;
150
- }
151
- if (GC_Iterations && iterations - prevGC_Iterations >= GC_Iterations
152
- || GC_IterationsAsync && iterationsAsync - prevGC_IterationsAsync >= GC_IterationsAsync
153
- || GC_Interval && now - prevGC_Time >= GC_Interval) {
154
- prevGC_Iterations = iterations;
155
- prevGC_IterationsAsync = iterationsAsync;
156
- prevGC_Time = now;
157
- yield garbageCollect(1);
158
- continue;
159
- }
160
- if (abortSignalExternal === null || abortSignalExternal === void 0 ? void 0 : abortSignalExternal.aborted) {
161
- continue;
162
- }
163
- if (!pool || abortSignalParallel.aborted) {
164
- yield runTest(_iterations, _variantArgs, abortSignalExternal);
165
- }
166
- else {
167
- if (!pool.hold(1)) {
168
- yield pool.holdWait(1);
169
- }
170
- void (() => __awaiter(this, void 0, void 0, function* () {
171
- try {
172
- if (abortSignalParallel === null || abortSignalParallel === void 0 ? void 0 : abortSignalParallel.aborted) {
173
- return;
174
- }
175
- yield runTest(_iterations, _variantArgs, abortSignalParallel);
176
- }
177
- finally {
178
- void pool.release(1);
179
- }
180
- }))();
181
- }
182
- }
183
- if (pool) {
184
- yield pool.holdWait(parallel);
185
- void pool.release(parallel);
186
- }
187
- if (abortSignalAll === null || abortSignalAll === void 0 ? void 0 : abortSignalAll.aborted) {
188
- throw abortSignalAll.reason;
189
- }
190
- onCompleted();
191
- yield garbageCollect(1);
192
- return iterations;
18
+ const variants = testVariantsIterable({
19
+ argsTemplates: args,
193
20
  });
194
- }
195
- return next();
21
+ return testVariantsRun(testRun, variants, options);
22
+ });
196
23
  };
197
24
  };
198
25
  }
26
+ /*
27
+ export class TestVariants<Args extends Obj> {
28
+ private readonly _test: TestVariantsTest<Args>
29
+ test(args: Args, abortSignal: IAbortSignalFast) {
30
+ return this._test(args, abortSignal)
31
+ }
32
+
33
+ constructor(
34
+ test: TestVariantsTest<Args>,
35
+ ) {
36
+ this.test = test
37
+ }
38
+
39
+ createVariants<ArgsExtra extends Obj>(
40
+ argsTemplates: TestVariantsTemplatesExt<Args, ArgsExtra>,
41
+ ): Iterable<Args> {
42
+ return testVariantsIterable<Args, ArgsExtra>(argsTemplates)
43
+ }
44
+
45
+ createTestRun(
46
+ options?: null | TestVariantsCreateTestRunOptions<Args>,
47
+ ) {
48
+ return testVariantsCreateTestRun<Args>(this._test, options)
49
+ }
50
+
51
+ testAll<ArgsExtra extends Obj>(
52
+ argsTemplates: TestVariantsTemplatesExt<Args, ArgsExtra>,
53
+ ): TestVariantsCall<Args>
54
+ testAll(
55
+ variants: Iterable<Args>,
56
+ ): TestVariantsCall<Args>
57
+ testAll<ArgsExtra extends Obj>(
58
+ variantsOrTemplates: Iterable<Args> | TestVariantsTemplatesExt<Args, ArgsExtra>,
59
+ ): TestVariantsCall<Args> {
60
+ const variants = Symbol.iterator in variantsOrTemplates
61
+ ? variantsOrTemplates as Iterable<Args>
62
+ : this.createVariants(variantsOrTemplates as TestVariantsTemplatesExt<Args, ArgsExtra>)
63
+
64
+ const _this = this
65
+
66
+ return function testVariantsCall(
67
+ options?: null | TestVariantsRunOptions & TestVariantsCreateTestRunOptions<Args>,
68
+ ) {
69
+ const testRun = _this.createTestRun({
70
+ onError: options?.onError,
71
+ })
72
+
73
+ return testVariantsRun<Args>(testRun, variants, options)
74
+ }
75
+ }
76
+ }
77
+ */
199
78
 
200
79
  export { createTestVariants };