tla-ts 0.0.1 → 0.0.3-dev.763cc71
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 +81 -42
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +215 -30
- package/dist/index.d.ts +215 -30
- package/dist/index.js +1 -1
- package/dist/parallel-worker.cjs +2 -2
- package/dist/parallel-worker.js +2 -2
- package/dist/parallel.cjs +1 -1
- package/dist/parallel.js +2 -2
- package/dist/run-cli.cjs +20 -1
- package/dist/run-cli.js +20 -1
- package/dist/transfer.cjs +388 -39
- package/dist/transfer.js +388 -39
- package/package.json +6 -2
- package/src/ast.ts +122 -5
- package/src/bags.ts +161 -71
- package/src/builtins.ts +203 -23
- package/src/bundled-modules.ts +63 -32
- package/src/check.ts +945 -238
- package/src/cli-options.ts +58 -0
- package/src/codegen.ts +52 -18
- package/src/config.ts +39 -11
- package/src/environment.ts +485 -140
- package/src/errors.ts +59 -1
- package/src/evaluate.ts +489 -137
- package/src/exit-codes.ts +75 -0
- package/src/fingerprints.ts +2 -2
- package/src/index.ts +9 -4
- package/src/instances.ts +221 -66
- package/src/java-overrides.ts +241 -0
- package/src/json.ts +153 -72
- package/src/levels.ts +850 -0
- package/src/lexer.ts +103 -28
- package/src/liveness.ts +47 -91
- package/src/obligation-action.ts +384 -0
- package/src/obligation-anon.ts +575 -0
- package/src/obligation-deref.ts +637 -0
- package/src/obligation-expression.ts +1060 -0
- package/src/obligation-format.ts +406 -0
- package/src/obligation-generate.ts +1074 -0
- package/src/obligation-levels.ts +329 -0
- package/src/obligation-module.ts +1042 -0
- package/src/obligation-printer.ts +889 -0
- package/src/obligation-proof.ts +76 -0
- package/src/obligation-source.ts +1084 -0
- package/src/obligation-tuples.ts +184 -0
- package/src/obligations.ts +316 -0
- package/src/parallel-worker.ts +78 -30
- package/src/parallel.ts +116 -62
- package/src/parser.ts +958 -205
- package/src/pretty-print.ts +259 -0
- package/src/randomization.ts +24 -113
- package/src/resolve.ts +472 -41
- package/src/run-cli.ts +427 -61
- package/src/runtime.ts +63 -28
- package/src/spec-description.ts +509 -0
- package/src/standard-levels.ts +105 -0
- package/src/standard-modules.ts +223 -92
- package/src/subexpressions.ts +21 -35
- package/src/substitution-levels.ts +184 -0
- package/src/successors.ts +261 -46
- package/src/symmetry.ts +65 -21
- package/src/tableau.ts +43 -37
- package/src/tlc-ext.ts +120 -33
- package/src/tlc-module.ts +71 -47
- package/src/tlc-modules.ts +1022 -0
- package/src/tlc-order.ts +497 -0
- package/src/tlc-random.ts +411 -0
- package/src/tlc-summary.ts +109 -0
- package/src/transfer.ts +26 -5
- package/src/values.ts +1231 -176
package/dist/index.d.ts
CHANGED
|
@@ -12,10 +12,22 @@ interface LocalResolution {
|
|
|
12
12
|
interface SourceLocation {
|
|
13
13
|
line: number;
|
|
14
14
|
column: number;
|
|
15
|
+
range?: SourceRange;
|
|
16
|
+
}
|
|
17
|
+
interface SourceRange {
|
|
18
|
+
module: string;
|
|
19
|
+
start: SourceLocation;
|
|
20
|
+
end: SourceLocation;
|
|
15
21
|
}
|
|
16
22
|
interface NumberExpression {
|
|
17
23
|
kind: "Number";
|
|
18
24
|
value: number;
|
|
25
|
+
text?: string;
|
|
26
|
+
location: SourceLocation;
|
|
27
|
+
}
|
|
28
|
+
interface DecimalExpression {
|
|
29
|
+
kind: "Decimal";
|
|
30
|
+
text: string;
|
|
19
31
|
location: SourceLocation;
|
|
20
32
|
}
|
|
21
33
|
interface StringExpression {
|
|
@@ -33,6 +45,7 @@ interface ApplyExpression {
|
|
|
33
45
|
kind: "Apply";
|
|
34
46
|
operator: string;
|
|
35
47
|
args: Expression[];
|
|
48
|
+
argumentCounts?: number[];
|
|
36
49
|
location: SourceLocation;
|
|
37
50
|
resolution?: LocalResolution;
|
|
38
51
|
}
|
|
@@ -50,6 +63,7 @@ interface LambdaExpression {
|
|
|
50
63
|
interface JunctionExpression {
|
|
51
64
|
kind: "And" | "Or";
|
|
52
65
|
operands: Expression[];
|
|
66
|
+
isBulleted?: boolean;
|
|
53
67
|
location: SourceLocation;
|
|
54
68
|
}
|
|
55
69
|
interface PrimeExpression {
|
|
@@ -110,6 +124,7 @@ interface QuantifierExpression {
|
|
|
110
124
|
}
|
|
111
125
|
interface UnboundedQuantifierExpression {
|
|
112
126
|
kind: "UnboundedQuantifier";
|
|
127
|
+
quantifier: "Forall" | "Exists";
|
|
113
128
|
names: string[];
|
|
114
129
|
isTemporal?: boolean;
|
|
115
130
|
body: Expression;
|
|
@@ -249,16 +264,18 @@ interface SubexpressionExpression {
|
|
|
249
264
|
selectors: Selector[];
|
|
250
265
|
location: SourceLocation;
|
|
251
266
|
}
|
|
252
|
-
type Expression = NumberExpression | StringExpression | IdentifierExpression | ApplyExpression | OperatorReferenceExpression | LambdaExpression | JunctionExpression | PrimeExpression | UnchangedExpression | EnabledExpression | IfExpression | CaseExpression | LetExpression | QuantifierExpression | UnboundedQuantifierExpression | ChooseExpression | SetEnumerationExpression | SetFilterExpression | SetMapExpression | TupleExpression | FunctionConstructionExpression | FunctionSetExpression | RecordExpression | ExceptExpression | ExceptAtExpression | FunctionApplicationExpression | FieldAccessExpression | ProductExpression | TemporalExpression | ActionExpression | FairnessExpression | LabelExpression | SubexpressionExpression;
|
|
267
|
+
type Expression = NumberExpression | DecimalExpression | StringExpression | IdentifierExpression | ApplyExpression | OperatorReferenceExpression | LambdaExpression | JunctionExpression | PrimeExpression | UnchangedExpression | EnabledExpression | IfExpression | CaseExpression | LetExpression | QuantifierExpression | UnboundedQuantifierExpression | ChooseExpression | SetEnumerationExpression | SetFilterExpression | SetMapExpression | TupleExpression | FunctionConstructionExpression | FunctionSetExpression | RecordExpression | ExceptExpression | ExceptAtExpression | FunctionApplicationExpression | FieldAccessExpression | ProductExpression | TemporalExpression | ActionExpression | FairnessExpression | LabelExpression | SubexpressionExpression;
|
|
253
268
|
interface OperatorParam {
|
|
254
269
|
name: string;
|
|
255
270
|
arity: number;
|
|
271
|
+
location?: SourceLocation;
|
|
256
272
|
}
|
|
257
273
|
interface OperatorDefinition {
|
|
258
274
|
kind: "Operator";
|
|
259
275
|
name: string;
|
|
260
276
|
params: OperatorParam[];
|
|
261
277
|
body: Expression;
|
|
278
|
+
bodyRange?: SourceRange;
|
|
262
279
|
isLocal: boolean;
|
|
263
280
|
isRecursive: boolean;
|
|
264
281
|
location: SourceLocation;
|
|
@@ -276,6 +293,7 @@ type Definition = OperatorDefinition | FunctionDefinition;
|
|
|
276
293
|
interface Declaration {
|
|
277
294
|
name: string;
|
|
278
295
|
arity: number;
|
|
296
|
+
location: SourceLocation;
|
|
279
297
|
}
|
|
280
298
|
interface Assumption {
|
|
281
299
|
name: string | undefined;
|
|
@@ -295,21 +313,139 @@ interface Instance {
|
|
|
295
313
|
substitutions: InstanceSubstitution[];
|
|
296
314
|
isLocal: boolean;
|
|
297
315
|
location: SourceLocation;
|
|
316
|
+
instanceRange: SourceRange;
|
|
317
|
+
definitionRange?: SourceRange;
|
|
298
318
|
}
|
|
299
|
-
interface
|
|
300
|
-
|
|
301
|
-
|
|
319
|
+
interface NewSymbol {
|
|
320
|
+
kind: "NewSymbol";
|
|
321
|
+
name: string;
|
|
322
|
+
arity: number;
|
|
323
|
+
level: "Constant" | "Variable" | "State" | "Action" | "Temporal";
|
|
324
|
+
set: Expression | undefined;
|
|
325
|
+
location: SourceLocation;
|
|
326
|
+
}
|
|
327
|
+
interface AssumeProve {
|
|
328
|
+
kind: "AssumeProve";
|
|
329
|
+
assumptions: (Expression | NewSymbol | AssumeProve)[];
|
|
330
|
+
conclusion: Expression;
|
|
331
|
+
location: SourceLocation;
|
|
332
|
+
}
|
|
333
|
+
type Fact = Expression | {
|
|
334
|
+
kind: "ModuleFact";
|
|
335
|
+
name: string;
|
|
336
|
+
location: SourceLocation;
|
|
337
|
+
};
|
|
338
|
+
interface UseOrHide {
|
|
339
|
+
kind: "Use" | "Hide";
|
|
340
|
+
isOnly: boolean;
|
|
341
|
+
facts: Fact[];
|
|
342
|
+
defs: Fact[];
|
|
343
|
+
keyword: SourceRange;
|
|
344
|
+
location: SourceLocation;
|
|
302
345
|
}
|
|
346
|
+
type Proof = {
|
|
347
|
+
kind: "Obvious" | "Omitted";
|
|
348
|
+
keyword: SourceRange;
|
|
349
|
+
location: SourceLocation;
|
|
350
|
+
} | {
|
|
351
|
+
kind: "By";
|
|
352
|
+
isOnly: boolean;
|
|
353
|
+
facts: Fact[];
|
|
354
|
+
defs: Fact[];
|
|
355
|
+
keyword: SourceRange;
|
|
356
|
+
location: SourceLocation;
|
|
357
|
+
} | {
|
|
358
|
+
kind: "Steps";
|
|
359
|
+
level: number;
|
|
360
|
+
steps: ProofStep[];
|
|
361
|
+
location: SourceLocation;
|
|
362
|
+
};
|
|
363
|
+
interface DefineStep {
|
|
364
|
+
kind: "Define";
|
|
365
|
+
definitions: (Definition | Instance)[];
|
|
366
|
+
location: SourceLocation;
|
|
367
|
+
}
|
|
368
|
+
type StepBody = UseOrHide | Instance | DefineStep | {
|
|
369
|
+
kind: "Have";
|
|
370
|
+
expression: Expression;
|
|
371
|
+
} | {
|
|
372
|
+
kind: "Take";
|
|
373
|
+
names: string[];
|
|
374
|
+
bounds: Bound[];
|
|
375
|
+
} | {
|
|
376
|
+
kind: "Witness";
|
|
377
|
+
expressions: Expression[];
|
|
378
|
+
} | {
|
|
379
|
+
kind: "Pick";
|
|
380
|
+
names: string[];
|
|
381
|
+
bounds: Bound[];
|
|
382
|
+
body: Expression;
|
|
383
|
+
} | {
|
|
384
|
+
kind: "Case";
|
|
385
|
+
expression: Expression;
|
|
386
|
+
} | {
|
|
387
|
+
kind: "Assert";
|
|
388
|
+
isSuffices: boolean;
|
|
389
|
+
statement: Expression | AssumeProve;
|
|
390
|
+
} | {
|
|
391
|
+
kind: "Qed";
|
|
392
|
+
};
|
|
393
|
+
interface ProofStep {
|
|
394
|
+
name: string | undefined;
|
|
395
|
+
token: string;
|
|
396
|
+
body: StepBody;
|
|
397
|
+
head: SourceRange;
|
|
398
|
+
proof: Proof | undefined;
|
|
399
|
+
location: SourceLocation;
|
|
400
|
+
}
|
|
401
|
+
interface Theorem {
|
|
402
|
+
name: string | undefined;
|
|
403
|
+
statement: Expression | AssumeProve;
|
|
404
|
+
proof: Proof | undefined;
|
|
405
|
+
location: SourceLocation;
|
|
406
|
+
}
|
|
407
|
+
type ModuleUnit = {
|
|
408
|
+
kind: "Constants";
|
|
409
|
+
declarations: Declaration[];
|
|
410
|
+
} | {
|
|
411
|
+
kind: "Variables";
|
|
412
|
+
declarations: Declaration[];
|
|
413
|
+
} | {
|
|
414
|
+
kind: "Recursive";
|
|
415
|
+
declarations: Declaration[];
|
|
416
|
+
} | {
|
|
417
|
+
kind: "Definition";
|
|
418
|
+
definition: Definition;
|
|
419
|
+
} | {
|
|
420
|
+
kind: "Instance";
|
|
421
|
+
instance: Instance;
|
|
422
|
+
} | {
|
|
423
|
+
kind: "Assumption";
|
|
424
|
+
assumption: Assumption;
|
|
425
|
+
} | {
|
|
426
|
+
kind: "Theorem";
|
|
427
|
+
theorem: Theorem;
|
|
428
|
+
} | {
|
|
429
|
+
kind: "Use";
|
|
430
|
+
use: UseOrHide;
|
|
431
|
+
} | {
|
|
432
|
+
kind: "Module";
|
|
433
|
+
module: Module;
|
|
434
|
+
};
|
|
303
435
|
interface Module {
|
|
304
436
|
name: string;
|
|
305
|
-
outer: OuterScope | undefined;
|
|
306
437
|
modules: Module[];
|
|
307
438
|
extends: string[];
|
|
439
|
+
extendsRanges: SourceRange[];
|
|
308
440
|
constants: Declaration[];
|
|
309
|
-
variables:
|
|
441
|
+
variables: Declaration[];
|
|
310
442
|
definitions: Definition[];
|
|
311
443
|
instances: Instance[];
|
|
312
444
|
assumptions: Assumption[];
|
|
445
|
+
location: SourceLocation;
|
|
446
|
+
theorems: Theorem[];
|
|
447
|
+
uses: UseOrHide[];
|
|
448
|
+
units: ModuleUnit[];
|
|
313
449
|
}
|
|
314
450
|
type ConfigValue = {
|
|
315
451
|
kind: "Number";
|
|
@@ -351,13 +487,39 @@ interface ModelConfig {
|
|
|
351
487
|
checkDeadlock: boolean;
|
|
352
488
|
symmetry: string | undefined;
|
|
353
489
|
view: string | undefined;
|
|
490
|
+
alias: string | undefined;
|
|
354
491
|
postconditions: string[];
|
|
355
492
|
possible: string[];
|
|
493
|
+
periodic: string | undefined;
|
|
494
|
+
rlReward: string | undefined;
|
|
356
495
|
}
|
|
357
496
|
export declare const parseConfig: (source: string) => ModelConfig;
|
|
497
|
+
export declare class TlaError extends Error {
|
|
498
|
+
constructor(message: string, cause?: unknown);
|
|
499
|
+
}
|
|
500
|
+
interface SyntaxFailure {
|
|
501
|
+
reason: string;
|
|
502
|
+
line: number;
|
|
503
|
+
column: number;
|
|
504
|
+
isEnd: boolean;
|
|
505
|
+
}
|
|
506
|
+
export declare class TlaSyntaxError extends TlaError {
|
|
507
|
+
failure: SyntaxFailure | undefined;
|
|
508
|
+
constructor(message: string, cause?: unknown, failure?: SyntaxFailure);
|
|
509
|
+
}
|
|
510
|
+
export declare class TlaConfigError extends TlaError {
|
|
511
|
+
constructor(message: string, cause?: unknown);
|
|
512
|
+
}
|
|
513
|
+
export declare class TlaEvaluationError extends TlaError {
|
|
514
|
+
constructor(message: string, cause?: unknown);
|
|
515
|
+
}
|
|
516
|
+
export declare class TlaUnsupportedError extends TlaError {
|
|
517
|
+
constructor(message: string, cause?: unknown);
|
|
518
|
+
}
|
|
358
519
|
interface ModelValue {
|
|
359
520
|
kind: "ModelValue";
|
|
360
521
|
name: string;
|
|
522
|
+
type: string | undefined;
|
|
361
523
|
}
|
|
362
524
|
interface SetValue {
|
|
363
525
|
kind: "Set";
|
|
@@ -365,12 +527,17 @@ interface SetValue {
|
|
|
365
527
|
hash: number;
|
|
366
528
|
fingerprint: number;
|
|
367
529
|
}
|
|
530
|
+
interface MixedSetValue {
|
|
531
|
+
kind: "MixedSet";
|
|
532
|
+
elements: Value[];
|
|
533
|
+
}
|
|
368
534
|
interface FunctionValue {
|
|
369
535
|
kind: "Function";
|
|
370
536
|
domain: Value[];
|
|
371
537
|
range: Value[];
|
|
372
538
|
hash: number;
|
|
373
539
|
fingerprint: number;
|
|
540
|
+
writtenKeys: Value[] | undefined;
|
|
374
541
|
}
|
|
375
542
|
interface IntervalValue {
|
|
376
543
|
kind: "Interval";
|
|
@@ -414,58 +581,76 @@ interface FilteredSetValue {
|
|
|
414
581
|
base: Value;
|
|
415
582
|
test: (element: Value) => boolean;
|
|
416
583
|
}
|
|
584
|
+
interface UnionValue {
|
|
585
|
+
kind: "Union";
|
|
586
|
+
base: Value;
|
|
587
|
+
}
|
|
588
|
+
interface LazyFunctionParameter {
|
|
589
|
+
name: string;
|
|
590
|
+
domain: Value;
|
|
591
|
+
}
|
|
592
|
+
interface LazyFunctionSource {
|
|
593
|
+
parameters: LazyFunctionParameter[];
|
|
594
|
+
body: string;
|
|
595
|
+
}
|
|
417
596
|
interface LazyFunctionValue {
|
|
418
597
|
kind: "LazyFunction";
|
|
419
598
|
domain: Value;
|
|
420
599
|
apply: (argument: Value) => Value;
|
|
600
|
+
source?: LazyFunctionSource;
|
|
421
601
|
}
|
|
422
|
-
type Value = boolean | number | string | ModelValue | SetValue | FunctionValue | IntervalValue | InfiniteSetValue | SubsetValue | FunctionSetValue | RecordSetValue | ProductSetValue | SequenceSetValue | SetOperationValue | FilteredSetValue | LazyFunctionValue;
|
|
423
|
-
export declare const formatValue: (value: Value,
|
|
602
|
+
type Value = boolean | number | string | ModelValue | SetValue | MixedSetValue | FunctionValue | IntervalValue | InfiniteSetValue | SubsetValue | FunctionSetValue | RecordSetValue | ProductSetValue | SequenceSetValue | SetOperationValue | FilteredSetValue | UnionValue | LazyFunctionValue;
|
|
603
|
+
export declare const formatValue: (value: Value, isStrict?: boolean, isNormalized?: boolean) => string;
|
|
424
604
|
interface CheckOptions {
|
|
425
605
|
source: string;
|
|
426
606
|
config: string | ModelConfig;
|
|
427
607
|
loadModule?: (name: string) => string | undefined;
|
|
608
|
+
loadClass?: (name: string) => Uint8Array | undefined;
|
|
428
609
|
onPrint?: (text: string) => void;
|
|
610
|
+
onPause?: () => void;
|
|
429
611
|
readFile?: (path: string) => string | undefined;
|
|
430
612
|
writeFile?: (path: string, content: string) => void;
|
|
613
|
+
seed?: bigint;
|
|
614
|
+
workers?: number;
|
|
615
|
+
livenessCheck?: "default" | "final";
|
|
431
616
|
}
|
|
432
|
-
type CheckStatus = "success" | "assumption-violation" | "invariant-violation" | "property-violation" | "liveness-violation" | "postcondition-violation" | "deadlock";
|
|
617
|
+
type CheckStatus = "success" | "assumption-violation" | "invariant-violation" | "property-violation" | "liveness-violation" | "postcondition-violation" | "deadlock" | "error";
|
|
433
618
|
interface TraceStep {
|
|
434
619
|
action: string | undefined;
|
|
620
|
+
label: string | undefined;
|
|
435
621
|
state: Record<string, Value>;
|
|
436
622
|
}
|
|
437
623
|
interface Violation {
|
|
438
624
|
name: string;
|
|
439
625
|
trace: TraceStep[];
|
|
440
626
|
loopStart: number | undefined;
|
|
627
|
+
loopLabel?: string;
|
|
441
628
|
message?: string;
|
|
629
|
+
counts?: string;
|
|
630
|
+
unwitnessed?: Postcondition;
|
|
631
|
+
}
|
|
632
|
+
interface Postcondition {
|
|
633
|
+
name: string;
|
|
634
|
+
message: string;
|
|
635
|
+
counts?: string;
|
|
636
|
+
}
|
|
637
|
+
interface EvaluationFailure {
|
|
638
|
+
message: string;
|
|
639
|
+
trace: TraceStep[];
|
|
640
|
+
initialState: Record<string, Value> | undefined;
|
|
641
|
+
exitCode: number;
|
|
442
642
|
}
|
|
443
643
|
interface CheckResult {
|
|
444
644
|
status: CheckStatus;
|
|
445
645
|
violation: Violation | undefined;
|
|
646
|
+
failure: EvaluationFailure | undefined;
|
|
446
647
|
generatedStates: number;
|
|
447
648
|
distinctStates: number;
|
|
649
|
+
queuedStates: number;
|
|
448
650
|
depth: number;
|
|
651
|
+
outDegrees: number[] | undefined;
|
|
652
|
+
fingerprintDistance: bigint | undefined;
|
|
449
653
|
}
|
|
450
|
-
export declare const check: (options: CheckOptions) => CheckResult
|
|
451
|
-
export declare class TlaError extends Error {
|
|
452
|
-
constructor(message: string, cause?: unknown);
|
|
453
|
-
}
|
|
454
|
-
export declare class TlaSyntaxError extends TlaError {
|
|
455
|
-
constructor(message: string, cause?: unknown);
|
|
456
|
-
}
|
|
457
|
-
export declare class TlaConfigError extends TlaError {
|
|
458
|
-
constructor(message: string, cause?: unknown);
|
|
459
|
-
}
|
|
460
|
-
export declare class TlaEvaluationError extends TlaError {
|
|
461
|
-
constructor(message: string, cause?: unknown);
|
|
462
|
-
}
|
|
463
|
-
export declare class TlaUnsupportedError extends TlaError {
|
|
464
|
-
constructor(message: string, cause?: unknown);
|
|
465
|
-
}
|
|
466
|
-
interface ParallelCheckOptions extends CheckOptions {
|
|
467
|
-
workers: number;
|
|
468
|
-
}
|
|
469
|
-
export declare const checkInParallel: (options: ParallelCheckOptions) => Promise<CheckResult>;
|
|
654
|
+
export declare const check: (options: CheckOptions) => Promise<CheckResult>;
|
|
470
655
|
export declare const parseModule: (source: string) => Module;
|
|
471
|
-
export type { CheckOptions, CheckResult, CheckStatus, ConfigValue, ConstantAssignment, ModelConfig, Module,
|
|
656
|
+
export type { CheckOptions, CheckResult, CheckStatus, ConfigValue, ConstantAssignment, EvaluationFailure, ModelConfig, Module, Substitution, TraceStep, Value, Violation };
|
package/dist/index.js
CHANGED
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* This source code is licensed under the MIT license found in the
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
8
|
*/
|
|
9
|
-
import{
|
|
9
|
+
import{A as e,C as t,D as n,N as r,P as i,_ as a,j as o,k as s}from"./transfer.js";import{t as c}from"./parallel.js";export{s as TlaConfigError,e as TlaError,o as TlaEvaluationError,r as TlaSyntaxError,i as TlaUnsupportedError,c as check,t as formatValue,n as parseConfig,a as parseModule};
|
package/dist/parallel-worker.cjs
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This source code is licensed under the MIT license found in the
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
8
|
*/
|
|
9
|
-
const e=require("./transfer.cjs"),t=e=>{let t=e.reduce((e,t)=>e+t,0),n=t/e.length;if(Math.max(...e)-Math.min(...e)<=Math.max(64,n/4))return[];let r=e.map((
|
|
9
|
+
const e=require("./transfer.cjs"),t=e=>{let t=e.reduce((e,t)=>e+t,0),n=t/e.length;if(Math.max(...e)-Math.min(...e)<=Math.max(64,n/4))return[];let r=e.map((r,i)=>Math.floor(n)+ +(i<t%e.length)),i=e.flatMap((e,t)=>e>r[t]?[{index:t,amount:e-r[t]}]:[]),a=e.flatMap((e,t)=>e<r[t]?[{index:t,amount:r[t]-e}]:[]),o=[];for(let e of i)for(let t of a){let n=Math.min(e.amount,t.amount);n!==0&&(o.push({from:e.index,to:t.index,count:n}),e.amount-=n,t.amount-=n)}return o},n=async()=>typeof globalThis.postMessage==`function`?globalThis:(await import(
|
|
10
10
|
/* @vite-ignore */
|
|
11
11
|
/* webpackIgnore: true */
|
|
12
|
-
`node:worker_threads`)).parentPort,r=()=>{let e=/* @__PURE__ */ new Map,t=/* @__PURE__ */ new Map,n=(e,t)=>`${e}:${t}`,r=n=>{let r=t.get(n),i=e.get(n)??[];!r||i.length<r.count||(t.delete(n),e.delete(n),r.resolve(i))};return{deliver:t=>{let i=n(t.phase,t.level);e.set(i,[...e.get(i)??[],t]),r(i)},receive:(e,i,a)=>new Promise(o=>{let s=n(e,i);t.set(s,{count:a,resolve:o}),r(s)})}},i=(n,i)=>{let a=new Map(n.modules),o=e.
|
|
12
|
+
`node:worker_threads`)).parentPort,r=()=>{let e=/* @__PURE__ */ new Map,t=/* @__PURE__ */ new Map,n=(e,t)=>`${e}:${t}`,r=n=>{let r=t.get(n),i=e.get(n)??[];!r||i.length<r.count||(t.delete(n),e.delete(n),r.resolve(i))};return{deliver:t=>{let i=n(t.phase,t.level);e.set(i,[...e.get(i)??[],t]),r(i)},receive:(e,i,a)=>new Promise(o=>{let s=n(e,i);t.set(s,{count:a,resolve:o}),r(s)})}},i=(n,i)=>{let a=new Map(n.modules),o=e=>a.get(e),s=new Map(n.classes);e.T(e.m(n.source,n.config,o));let c=e.w(),l=e.g(n.config,{source:n.source,loadModule:o,loadClass:e=>s.get(e),print:()=>{},files:{readFile:void 0,writeFile:void 0}}).environment,u=e.s(n.config,l,()=>e.h(n.source,o)),d=u?.spec.next;if(!u||d===void 0)return i.postMessage({type:`abort`});let f=n.count,p=n.index,m=e.S(),h=e.t(l.variables.length),g=e.r(),_=e.r(),v=u.isSymmetric?e.r():void 0,y=/* @__PURE__ */ new Int32Array(2),b=r(),x=n.ports.flatMap((e,t)=>e?[{port:e,index:t}]:[]);x.forEach(e=>{e.port.addEventListener(`message`,e=>b.deliver(e.data)),e.port.start?.()});for(let e=0;e<n.seedFingerprints.length;e+=2)g.insert(n.seedFingerprints[e],n.seedFingerprints[e+1]);let S={states:h(n.seed).map(m)},C=(e,t,r)=>n.ports[e]?.postMessage(t,r),w=(t,r,i)=>{let a=Array.from({length:f},()=>({states:[],origins:[],fingerprints:[],fingerprintStates:[]})),o={generated:0},s=new Int32Array(t.length);for(let c=0;c<t.length;c++){let h=t[c],b=e.x(d,h,l,u.spec.scope);if(o.generated+=b.length,b.length===0&&n.config.checkDeadlock)return;for(let t of b){if(u.findViolatedActionProperty(h,t.state))return;if(!u.satisfiesActionConstraints(h,t.state)||v&&(e.a(t.state,y),!v.insert(y[0],y[1])))continue;m(t.state);let n=u.getFingerprintState(t.state);e.a(n,y);let o=e.i(y[1],f);if(o===p){if(!g.insert(y[0],y[1]))continue;if(u.findViolatedInvariant(t.state,h))return;if(!u.satisfiesConstraints(t.state,h)){g.remove(y[0],y[1]);continue}r.push(t.state),i.push(n),s[c]++}else _.insert(y[0],y[1])&&(a[o].states.push(t.state),a[o].origins.push(c),a[o].fingerprints.push(y[0],y[1]),a[o].fingerprintStates.push(n))}}return{pending:a,generated:o.generated,newStates:s}},T=e=>{let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=+!!g.insert(e[n*2],e[n*2+1]);return t},E=(e,t,n,r,i)=>{let a=[];for(let o=0;o<t.length;o++){if(t[o]===0)continue;let s=e.states[o],c=S.states[e.origins[o]];if(u.findViolatedInvariant(s,c))return;u.satisfiesConstraints(s,c)?(n.push(s),r.push(e.fingerprintStates[o]),i[e.origins[o]]++):(_.remove(e.fingerprints[o*2],e.fingerprints[o*2+1]),a.push(e.fingerprints[o*2],e.fingerprints[o*2+1]))}return Int32Array.from(a)},D=e=>{for(let t=0;t<e.length;t+=2)g.remove(e[t],e[t+1])},O=async(n,r,i)=>{let a=t(i);if(a.length===0)return!0;let o=new Map(x.map(t=>[t.index,e.n()]));for(let e of a.filter(e=>e.from===p)){let t=o.get(e.to),n=r.splice(r.length-e.count,e.count);if(!t||!n.every(t.encode))return!1}return o.forEach((e,t)=>{let r=e.finish();C(t,{phase:`balance`,level:n,from:p,states:r},[r.words.buffer])}),(await b.receive(`balance`,n,x.length)).forEach(e=>{e.states&&r.push(...h(e.states).map(m))}),!0},k=async t=>{let n=[],r=[],i=w(S.states,n,r);if(!i||e.w()!==c)return;x.forEach(e=>{let n=Int32Array.from(i.pending[e.index].fingerprints);C(e.index,{phase:`query`,level:t,from:p,fingerprints:n},[n.buffer])}),(await b.receive(`query`,t,x.length)).forEach(e=>{let n=T(e.fingerprints??[]);C(e.from,{phase:`answer`,level:t,from:p,bits:n},[n.buffer])});let a=await b.receive(`answer`,t,x.length);for(let e of a){let a=E(i.pending[e.from],e.bits??/* @__PURE__ */ new Uint8Array,n,r,i.newStates);if(!a)return;C(e.from,{phase:`sizes`,level:t,from:p,unmarks:a},[a.buffer])}let o=n.length,s=Array.from({length:32},()=>0);i.newStates.forEach(e=>s[Math.min(e,31)]++);let l=u.getStoredFingerprints(n,r),d=Array.from({length:f},()=>0);if(d[p]=o,x.forEach(e=>C(e.index,{phase:`sizes`,level:t,from:p,size:o},[])),(await b.receive(`sizes`,t,x.length*2)).forEach(e=>{e.unmarks?D(e.unmarks):d[e.from]=e.size??0}),e.w()===c&&await O(t,n,d))return S.states=n,{type:`level`,level:t,generated:i.generated,added:o,outDegrees:s,fingerprints:l}},A=e=>i.postMessage(e,e.type===`level`?[e.fingerprints.buffer]:[]),j=e=>{k(e).then(e=>A(e??{type:`abort`}),()=>A({type:`abort`}))};i.addEventListener(`message`,e=>{let t=e.data;t.type===`level`&&j(t.level)}),A({type:`ready`})};n().then(e=>{let t=n=>{let r=n.data;if(r.type===`start`){e.removeEventListener?.(`message`,t);try{i(r,e)}catch{e.postMessage({type:`abort`})}}};e.addEventListener(`message`,t),e.start?.()});
|
package/dist/parallel-worker.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This source code is licensed under the MIT license found in the
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
8
|
*/
|
|
9
|
-
import{
|
|
9
|
+
import{S as e,T as t,a as n,g as r,h as i,i as a,m as o,n as s,r as c,s as l,t as u,w as d,x as f}from"./transfer.js";const p=e=>{let t=e.reduce((e,t)=>e+t,0),n=t/e.length;if(Math.max(...e)-Math.min(...e)<=Math.max(64,n/4))return[];let r=e.map((r,i)=>Math.floor(n)+ +(i<t%e.length)),i=e.flatMap((e,t)=>e>r[t]?[{index:t,amount:e-r[t]}]:[]),a=e.flatMap((e,t)=>e<r[t]?[{index:t,amount:r[t]-e}]:[]),o=[];for(let e of i)for(let t of a){let n=Math.min(e.amount,t.amount);n!==0&&(o.push({from:e.index,to:t.index,count:n}),e.amount-=n,t.amount-=n)}return o},m=async()=>typeof globalThis.postMessage==`function`?globalThis:(await import(
|
|
10
10
|
/* @vite-ignore */
|
|
11
11
|
/* webpackIgnore: true */
|
|
12
|
-
`node:worker_threads`)).parentPort,
|
|
12
|
+
`node:worker_threads`)).parentPort,h=()=>{let e=/* @__PURE__ */ new Map,t=/* @__PURE__ */ new Map,n=(e,t)=>`${e}:${t}`,r=n=>{let r=t.get(n),i=e.get(n)??[];!r||i.length<r.count||(t.delete(n),e.delete(n),r.resolve(i))};return{deliver:t=>{let i=n(t.phase,t.level);e.set(i,[...e.get(i)??[],t]),r(i)},receive:(e,i,a)=>new Promise(o=>{let s=n(e,i);t.set(s,{count:a,resolve:o}),r(s)})}},g=(m,g)=>{let _=new Map(m.modules),v=e=>_.get(e),y=new Map(m.classes);t(o(m.source,m.config,v));let b=d(),x=r(m.config,{source:m.source,loadModule:v,loadClass:e=>y.get(e),print:()=>{},files:{readFile:void 0,writeFile:void 0}}).environment,S=l(m.config,x,()=>i(m.source,v)),C=S?.spec.next;if(!S||C===void 0)return g.postMessage({type:`abort`});let w=m.count,T=m.index,E=e(),D=u(x.variables.length),O=c(),k=c(),A=S.isSymmetric?c():void 0,j=/* @__PURE__ */ new Int32Array(2),M=h(),N=m.ports.flatMap((e,t)=>e?[{port:e,index:t}]:[]);N.forEach(e=>{e.port.addEventListener(`message`,e=>M.deliver(e.data)),e.port.start?.()});for(let e=0;e<m.seedFingerprints.length;e+=2)O.insert(m.seedFingerprints[e],m.seedFingerprints[e+1]);let P={states:D(m.seed).map(E)},F=(e,t,n)=>m.ports[e]?.postMessage(t,n),I=(e,t,r)=>{let i=Array.from({length:w},()=>({states:[],origins:[],fingerprints:[],fingerprintStates:[]})),o={generated:0},s=new Int32Array(e.length);for(let c=0;c<e.length;c++){let l=e[c],u=f(C,l,x,S.spec.scope);if(o.generated+=u.length,u.length===0&&m.config.checkDeadlock)return;for(let e of u){if(S.findViolatedActionProperty(l,e.state))return;if(!S.satisfiesActionConstraints(l,e.state)||A&&(n(e.state,j),!A.insert(j[0],j[1])))continue;E(e.state);let o=S.getFingerprintState(e.state);n(o,j);let u=a(j[1],w);if(u===T){if(!O.insert(j[0],j[1]))continue;if(S.findViolatedInvariant(e.state,l))return;if(!S.satisfiesConstraints(e.state,l)){O.remove(j[0],j[1]);continue}t.push(e.state),r.push(o),s[c]++}else k.insert(j[0],j[1])&&(i[u].states.push(e.state),i[u].origins.push(c),i[u].fingerprints.push(j[0],j[1]),i[u].fingerprintStates.push(o))}}return{pending:i,generated:o.generated,newStates:s}},L=e=>{let t=new Uint8Array(e.length/2);for(let n=0;n<t.length;n++)t[n]=+!!O.insert(e[n*2],e[n*2+1]);return t},R=(e,t,n,r,i)=>{let a=[];for(let o=0;o<t.length;o++){if(t[o]===0)continue;let s=e.states[o],c=P.states[e.origins[o]];if(S.findViolatedInvariant(s,c))return;S.satisfiesConstraints(s,c)?(n.push(s),r.push(e.fingerprintStates[o]),i[e.origins[o]]++):(k.remove(e.fingerprints[o*2],e.fingerprints[o*2+1]),a.push(e.fingerprints[o*2],e.fingerprints[o*2+1]))}return Int32Array.from(a)},z=e=>{for(let t=0;t<e.length;t+=2)O.remove(e[t],e[t+1])},B=async(e,t,n)=>{let r=p(n);if(r.length===0)return!0;let i=new Map(N.map(e=>[e.index,s()]));for(let e of r.filter(e=>e.from===T)){let n=i.get(e.to),r=t.splice(t.length-e.count,e.count);if(!n||!r.every(n.encode))return!1}return i.forEach((t,n)=>{let r=t.finish();F(n,{phase:`balance`,level:e,from:T,states:r},[r.words.buffer])}),(await M.receive(`balance`,e,N.length)).forEach(e=>{e.states&&t.push(...D(e.states).map(E))}),!0},V=async e=>{let t=[],n=[],r=I(P.states,t,n);if(!r||d()!==b)return;N.forEach(t=>{let n=Int32Array.from(r.pending[t.index].fingerprints);F(t.index,{phase:`query`,level:e,from:T,fingerprints:n},[n.buffer])}),(await M.receive(`query`,e,N.length)).forEach(t=>{let n=L(t.fingerprints??[]);F(t.from,{phase:`answer`,level:e,from:T,bits:n},[n.buffer])});let i=await M.receive(`answer`,e,N.length);for(let a of i){let i=R(r.pending[a.from],a.bits??/* @__PURE__ */ new Uint8Array,t,n,r.newStates);if(!i)return;F(a.from,{phase:`sizes`,level:e,from:T,unmarks:i},[i.buffer])}let a=t.length,o=Array.from({length:32},()=>0);r.newStates.forEach(e=>o[Math.min(e,31)]++);let s=S.getStoredFingerprints(t,n),c=Array.from({length:w},()=>0);if(c[T]=a,N.forEach(t=>F(t.index,{phase:`sizes`,level:e,from:T,size:a},[])),(await M.receive(`sizes`,e,N.length*2)).forEach(e=>{e.unmarks?z(e.unmarks):c[e.from]=e.size??0}),d()===b&&await B(e,t,c))return P.states=t,{type:`level`,level:e,generated:r.generated,added:a,outDegrees:o,fingerprints:s}},H=e=>g.postMessage(e,e.type===`level`?[e.fingerprints.buffer]:[]),U=e=>{V(e).then(e=>H(e??{type:`abort`}),()=>H({type:`abort`}))};g.addEventListener(`message`,e=>{let t=e.data;t.type===`level`&&U(t.level)}),H({type:`ready`})};m().then(e=>{let t=n=>{let r=n.data;if(r.type===`start`){e.removeEventListener?.(`message`,t);try{g(r,e)}catch{e.postMessage({type:`abort`})}}};e.addEventListener(`message`,t),e.start?.()});
|
package/dist/parallel.cjs
CHANGED
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
const e=require("./transfer.cjs"),t=async e=>{if(typeof Worker==`function`){let t=new Worker(new URL(`./parallel-worker.js`,require("url").pathToFileURL(__filename).href),{type:`module`});return t.addEventListener(`message`,t=>e(t.data)),t.addEventListener(`error`,()=>e({type:`abort`})),t}let t=new(await(import(
|
|
10
10
|
/* @vite-ignore */
|
|
11
11
|
/* webpackIgnore: true */
|
|
12
|
-
`node:worker_threads`))).Worker(new URL(`./parallel-worker.js`,require("url").pathToFileURL(__filename).href));return t.on(`message`,
|
|
12
|
+
`node:worker_threads`))).Worker(new URL(`./parallel-worker.js`,require("url").pathToFileURL(__filename).href));return t.on(`message`,e),t.on(`error`,()=>e({type:`abort`})),{postMessage:(e,n)=>t.postMessage(e,n),terminate:()=>void t.terminate()}},n=async n=>{let r=typeof n.config==`string`?e.D(n.config):n.config,i=()=>e.o({...n,config:r}),a=n.workers??1;if(a<2||r.view!==void 0||r.postconditions.length>0||r.possible.length>0)return i();let o=/* @__PURE__ */ new Map,s=e=>{let t=n.loadModule?.(e);return o.set(e,t),t},c=/* @__PURE__ */ new Map,l=e=>{let t=n.loadClass?.(e);return c.set(e,t),t};e.T(e.m(n.source,r,s));let u=e.w(),d=e.g(r,{source:n.source,loadModule:s,loadClass:l,print:n.onPrint??console.log,files:{readFile:n.readFile,writeFile:n.writeFile}}),f=d.environment,p=e.s(r,f,()=>e.h(n.source,s));if(e.c(d.assumptions,f)||!p||p.spec.init===void 0||p.spec.next===void 0||p.properties.liveness.length>0||e.y(f))return i();let m=e.S(),h=e.r(),g=/* @__PURE__ */ new Int32Array(2),_=Array.from({length:a},()=>({encoder:e.n(),fingerprints:[]})),v={generatedStates:0,distinctStates:0,queuedStates:0,depth:0,outDegrees:Array.from({length:32},()=>0)},y=[],b=()=>({status:`success`,violation:void 0,failure:void 0,...v,fingerprintDistance:e.d(v.distinctStates,v.generatedStates,()=>{let e=new BigInt64Array(v.distinctStates);return y.reduce((t,n)=>(e.set(n,t),t+n.length),0),e})}),x=t=>{let n=[];for(let r of e.b(t,f,p.spec.scope)){if(m(r),v.generatedStates++,e.a(p.getFingerprintState(r),g),!h.insert(g[0],g[1]))continue;if(p.findViolatedInvariant(r)||p.findFailedInitialPredicate(r))return!1;if(!p.satisfiesConstraints(r)){h.remove(g[0],g[1]);continue}let t=_[e.i(g[1],a)];if(!t.encoder.encode(r))return!1;t.fingerprints.push(g[0],g[1]),n.push(r),v.distinctStates++}return y.push(BigInt64Array.from(n,e=>f.runtime.getFingerprint(e))),!0};try{if(!x(p.spec.init))return i()}catch(t){if(!(t instanceof e.j))throw t;return i()}if(e.w()!==u)return i();if(v.depth=v.generatedStates===0?0:1,v.distinctStates===0)return b();let S=[],C={resolve:e=>{}},w=e=>{S.push(e),(e.type===`abort`||S.length===a)&&C.resolve(S.splice(0))},T=()=>new Promise(e=>{C.resolve=e}),E=T(),D=await Promise.all(Array.from({length:a},()=>t(w))),O=()=>D.forEach(e=>e.terminate()),k=/* @__PURE__ */ new Map,A=(e,t)=>{let n=e<t?`${e}:${t}`:`${t}:${e}`,r=k.get(n)??new MessageChannel;return k.set(n,r),e<t?r.port1:r.port2};D.forEach((e,t)=>{let i=Array.from({length:a},(e,n)=>n===t?void 0:A(t,n)),s=_[t].encoder.finish(),l=Int32Array.from(_[t].fingerprints),u={type:`start`,source:n.source,config:r,modules:[...o],classes:[...c],index:t,count:a,ports:i,seed:s,seedFingerprints:l};e.postMessage(u,[...i.filter(e=>e!==void 0),s.words.buffer,l.buffer])});let j=e=>e.some(e=>e.type===`abort`);if(j(await E))return O(),i();for(let e=1;;e++){let t=T();D.forEach(t=>t.postMessage({type:`level`,level:e}));let n=await t;if(j(n))return O(),i();let r=n.flatMap(e=>e.type===`level`?[e]:[]),a=r.reduce((e,t)=>e+t.added,0);if(v.generatedStates+=r.reduce((e,t)=>e+t.generated,0),v.distinctStates+=a,r.forEach(e=>{e.outDegrees.forEach((e,t)=>v.outDegrees[t]+=e),y.push(e.fingerprints)}),a===0)return O(),b();v.depth++}};Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return n}});
|
package/dist/parallel.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This source code is licensed under the MIT license found in the
|
|
7
7
|
* LICENSE file in the root directory of this source tree.
|
|
8
8
|
*/
|
|
9
|
-
import{
|
|
9
|
+
import{D as e,S as t,T as n,a as r,b as i,c as a,d as o,g as s,h as c,i as l,j as u,m as d,n as f,o as p,r as m,s as h,w as g,y as _}from"./transfer.js";const v=async e=>{if(typeof Worker==`function`){let t=new Worker(new URL(`./parallel-worker.js`,import.meta.url),{type:`module`});return t.addEventListener(`message`,t=>e(t.data)),t.addEventListener(`error`,()=>e({type:`abort`})),t}let t=new(await(import(
|
|
10
10
|
/* @vite-ignore */
|
|
11
11
|
/* webpackIgnore: true */
|
|
12
|
-
`node:worker_threads`))).Worker(new URL(`./parallel-worker.js`,import.meta.url));return t.on(`message`,
|
|
12
|
+
`node:worker_threads`))).Worker(new URL(`./parallel-worker.js`,import.meta.url));return t.on(`message`,e),t.on(`error`,()=>e({type:`abort`})),{postMessage:(e,n)=>t.postMessage(e,n),terminate:()=>void t.terminate()}},y=async y=>{let b=typeof y.config==`string`?e(y.config):y.config,x=()=>p({...y,config:b}),S=y.workers??1;if(S<2||b.view!==void 0||b.postconditions.length>0||b.possible.length>0)return x();let C=/* @__PURE__ */ new Map,w=e=>{let t=y.loadModule?.(e);return C.set(e,t),t},T=/* @__PURE__ */ new Map,E=e=>{let t=y.loadClass?.(e);return T.set(e,t),t};n(d(y.source,b,w));let D=g(),O=s(b,{source:y.source,loadModule:w,loadClass:E,print:y.onPrint??console.log,files:{readFile:y.readFile,writeFile:y.writeFile}}),k=O.environment,A=h(b,k,()=>c(y.source,w));if(a(O.assumptions,k)||!A||A.spec.init===void 0||A.spec.next===void 0||A.properties.liveness.length>0||_(k))return x();let j=t(),M=m(),N=/* @__PURE__ */ new Int32Array(2),P=Array.from({length:S},()=>({encoder:f(),fingerprints:[]})),F={generatedStates:0,distinctStates:0,queuedStates:0,depth:0,outDegrees:Array.from({length:32},()=>0)},I=[],L=()=>({status:`success`,violation:void 0,failure:void 0,...F,fingerprintDistance:o(F.distinctStates,F.generatedStates,()=>{let e=new BigInt64Array(F.distinctStates);return I.reduce((t,n)=>(e.set(n,t),t+n.length),0),e})}),R=e=>{let t=[];for(let n of i(e,k,A.spec.scope)){if(j(n),F.generatedStates++,r(A.getFingerprintState(n),N),!M.insert(N[0],N[1]))continue;if(A.findViolatedInvariant(n)||A.findFailedInitialPredicate(n))return!1;if(!A.satisfiesConstraints(n)){M.remove(N[0],N[1]);continue}let e=P[l(N[1],S)];if(!e.encoder.encode(n))return!1;e.fingerprints.push(N[0],N[1]),t.push(n),F.distinctStates++}return I.push(BigInt64Array.from(t,e=>k.runtime.getFingerprint(e))),!0};try{if(!R(A.spec.init))return x()}catch(e){if(!(e instanceof u))throw e;return x()}if(g()!==D)return x();if(F.depth=F.generatedStates===0?0:1,F.distinctStates===0)return L();let z=[],B={resolve:e=>{}},V=e=>{z.push(e),(e.type===`abort`||z.length===S)&&B.resolve(z.splice(0))},H=()=>new Promise(e=>{B.resolve=e}),U=H(),W=await Promise.all(Array.from({length:S},()=>v(V))),G=()=>W.forEach(e=>e.terminate()),K=/* @__PURE__ */ new Map,q=(e,t)=>{let n=e<t?`${e}:${t}`:`${t}:${e}`,r=K.get(n)??new MessageChannel;return K.set(n,r),e<t?r.port1:r.port2};W.forEach((e,t)=>{let n=Array.from({length:S},(e,n)=>n===t?void 0:q(t,n)),r=P[t].encoder.finish(),i=Int32Array.from(P[t].fingerprints),a={type:`start`,source:y.source,config:b,modules:[...C],classes:[...T],index:t,count:S,ports:n,seed:r,seedFingerprints:i};e.postMessage(a,[...n.filter(e=>e!==void 0),r.words.buffer,i.buffer])});let J=e=>e.some(e=>e.type===`abort`);if(J(await U))return G(),x();for(let e=1;;e++){let t=H();W.forEach(t=>t.postMessage({type:`level`,level:e}));let n=await t;if(J(n))return G(),x();let r=n.flatMap(e=>e.type===`level`?[e]:[]),i=r.reduce((e,t)=>e+t.added,0);if(F.generatedStates+=r.reduce((e,t)=>e+t.generated,0),F.distinctStates+=i,r.forEach(e=>{e.outDegrees.forEach((e,t)=>F.outDegrees[t]+=e),I.push(e.fingerprints)}),i===0)return G(),L();F.depth++}};export{y as t};
|