@typeonce/effect-machine 0.3.0 → 0.4.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 +203 -16
- package/dist/Machine.d.ts +784 -289
- package/dist/Machine.d.ts.map +1 -1
- package/dist/Machine.js +158 -528
- package/dist/Machine.js.map +1 -1
- package/dist/internal/machine/activities.d.ts +57 -0
- package/dist/internal/machine/activities.d.ts.map +1 -0
- package/dist/internal/machine/activities.js +49 -0
- package/dist/internal/machine/activities.js.map +1 -0
- package/dist/internal/machine/atom.d.ts +69 -0
- package/dist/internal/machine/atom.d.ts.map +1 -0
- package/dist/{AtomMachine.js → internal/machine/atom.js} +19 -94
- package/dist/internal/machine/atom.js.map +1 -0
- package/dist/internal/machine/cluster.d.ts +63 -0
- package/dist/internal/machine/cluster.d.ts.map +1 -0
- package/dist/{ClusterMachine.js → internal/machine/cluster.js} +14 -118
- package/dist/internal/machine/cluster.js.map +1 -0
- package/dist/internal/machine/command.d.ts +16 -0
- package/dist/internal/machine/command.d.ts.map +1 -0
- package/dist/internal/machine/command.js +45 -0
- package/dist/internal/machine/command.js.map +1 -0
- package/dist/internal/machine/commandRuntime.d.ts +13 -0
- package/dist/internal/machine/commandRuntime.d.ts.map +1 -0
- package/dist/internal/machine/commandRuntime.js +16 -0
- package/dist/internal/machine/commandRuntime.js.map +1 -0
- package/dist/internal/{machineModel.d.ts → machine/configuration.d.ts} +11 -60
- package/dist/internal/machine/configuration.d.ts.map +1 -0
- package/dist/internal/{machineModel.js → machine/configuration.js} +249 -544
- package/dist/internal/machine/configuration.js.map +1 -0
- package/dist/internal/{machineErrors.d.ts → machine/errors.d.ts} +1 -1
- package/dist/internal/machine/errors.d.ts.map +1 -0
- package/dist/internal/{machineErrors.js → machine/errors.js} +1 -1
- package/dist/internal/machine/errors.js.map +1 -0
- package/dist/internal/machine/executionPlan.d.ts +49 -0
- package/dist/internal/machine/executionPlan.d.ts.map +1 -0
- package/dist/internal/machine/executionPlan.js +667 -0
- package/dist/internal/machine/executionPlan.js.map +1 -0
- package/dist/internal/machine/invocation.d.ts +23 -0
- package/dist/internal/machine/invocation.d.ts.map +1 -0
- package/dist/internal/machine/invocation.js +77 -0
- package/dist/internal/machine/invocation.js.map +1 -0
- package/dist/internal/machine/machine.d.ts +183 -0
- package/dist/internal/machine/machine.d.ts.map +1 -0
- package/dist/internal/machine/machine.js +552 -0
- package/dist/internal/machine/machine.js.map +1 -0
- package/dist/internal/machine/planner.d.ts +182 -0
- package/dist/internal/machine/planner.d.ts.map +1 -0
- package/dist/internal/machine/planner.js +1082 -0
- package/dist/internal/machine/planner.js.map +1 -0
- package/dist/internal/{machineProcess.d.ts → machine/process.d.ts} +10 -4
- package/dist/internal/machine/process.d.ts.map +1 -0
- package/dist/internal/machine/process.js +446 -0
- package/dist/internal/machine/process.js.map +1 -0
- package/dist/internal/machine/protocol.d.ts +34 -0
- package/dist/internal/machine/protocol.d.ts.map +1 -0
- package/dist/internal/machine/protocol.js +182 -0
- package/dist/internal/machine/protocol.js.map +1 -0
- package/dist/internal/machine/readiness.d.ts +4 -0
- package/dist/internal/machine/readiness.d.ts.map +1 -0
- package/dist/internal/machine/readiness.js +2 -0
- package/dist/internal/machine/readiness.js.map +1 -0
- package/dist/internal/{machineRuntime.d.ts → machine/runtime.d.ts} +104 -2
- package/dist/internal/machine/runtime.d.ts.map +1 -0
- package/dist/internal/machine/runtime.js +1381 -0
- package/dist/internal/machine/runtime.js.map +1 -0
- package/dist/internal/machine/serialization.d.ts +14 -0
- package/dist/internal/machine/serialization.d.ts.map +1 -0
- package/dist/internal/machine/serialization.js +338 -0
- package/dist/internal/machine/serialization.js.map +1 -0
- package/dist/internal/machine/stateDefinition.d.ts +15 -0
- package/dist/internal/machine/stateDefinition.d.ts.map +1 -0
- package/dist/internal/machine/stateDefinition.js +210 -0
- package/dist/internal/machine/stateDefinition.js.map +1 -0
- package/dist/internal/machine/symbols.d.ts +3 -0
- package/dist/internal/machine/symbols.d.ts.map +1 -0
- package/dist/internal/machine/symbols.js +3 -0
- package/dist/internal/machine/symbols.js.map +1 -0
- package/dist/internal/machine/topology.d.ts +98 -0
- package/dist/internal/machine/topology.d.ts.map +1 -0
- package/dist/internal/machine/topology.js +347 -0
- package/dist/internal/machine/topology.js.map +1 -0
- package/dist/internal/testing/machine/arbitrary.d.ts +36 -0
- package/dist/internal/testing/machine/arbitrary.d.ts.map +1 -0
- package/dist/internal/testing/machine/arbitrary.js +68 -0
- package/dist/internal/testing/machine/arbitrary.js.map +1 -0
- package/dist/internal/testing/machine/finiteModel.d.ts +322 -0
- package/dist/internal/testing/machine/finiteModel.d.ts.map +1 -0
- package/dist/internal/testing/machine/finiteModel.js +976 -0
- package/dist/internal/testing/machine/finiteModel.js.map +1 -0
- package/dist/internal/testing/machine/referenceModel.d.ts +203 -0
- package/dist/internal/testing/machine/referenceModel.d.ts.map +1 -0
- package/dist/internal/testing/machine/referenceModel.js +1012 -0
- package/dist/internal/testing/machine/referenceModel.js.map +1 -0
- package/dist/internal/testing/machine/runtime.d.ts +328 -0
- package/dist/internal/testing/machine/runtime.d.ts.map +1 -0
- package/dist/internal/testing/machine/runtime.js +437 -0
- package/dist/internal/testing/machine/runtime.js.map +1 -0
- package/dist/internal/testing/machine/verification.d.ts +33 -0
- package/dist/internal/testing/machine/verification.d.ts.map +1 -0
- package/dist/internal/testing/machine/verification.js +1446 -0
- package/dist/internal/testing/machine/verification.js.map +1 -0
- package/dist/testing/MachineTest.d.ts +606 -0
- package/dist/testing/MachineTest.d.ts.map +1 -0
- package/dist/testing/MachineTest.js +102 -0
- package/dist/testing/MachineTest.js.map +1 -0
- package/dist/testing/index.d.ts +7 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +7 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/{ClusterMachine.d.ts → unstable/cluster/ClusterMachine.d.ts} +19 -27
- package/dist/unstable/cluster/ClusterMachine.d.ts.map +1 -0
- package/dist/unstable/cluster/ClusterMachine.js +126 -0
- package/dist/unstable/cluster/ClusterMachine.js.map +1 -0
- package/dist/{cluster.js → unstable/cluster/index.d.ts} +1 -1
- package/dist/unstable/cluster/index.d.ts.map +1 -0
- package/dist/{cluster.d.ts → unstable/cluster/index.js} +1 -1
- package/dist/unstable/cluster/index.js.map +1 -0
- package/dist/{AtomMachine.d.ts → unstable/reactivity/AtomMachine.d.ts} +35 -20
- package/dist/unstable/reactivity/AtomMachine.d.ts.map +1 -0
- package/dist/unstable/reactivity/AtomMachine.js +113 -0
- package/dist/unstable/reactivity/AtomMachine.js.map +1 -0
- package/dist/{reactivity.js → unstable/reactivity/index.d.ts} +1 -1
- package/dist/unstable/reactivity/index.d.ts.map +1 -0
- package/dist/{reactivity.d.ts → unstable/reactivity/index.js} +1 -1
- package/dist/unstable/reactivity/index.js.map +1 -0
- package/docs/agent-guide.md +169 -31
- package/package.json +19 -10
- package/dist/AtomMachine.d.ts.map +0 -1
- package/dist/AtomMachine.js.map +0 -1
- package/dist/ClusterMachine.d.ts.map +0 -1
- package/dist/ClusterMachine.js.map +0 -1
- package/dist/cluster.d.ts.map +0 -1
- package/dist/cluster.js.map +0 -1
- package/dist/internal/machineErrors.d.ts.map +0 -1
- package/dist/internal/machineErrors.js.map +0 -1
- package/dist/internal/machineModel.d.ts.map +0 -1
- package/dist/internal/machineModel.js.map +0 -1
- package/dist/internal/machinePlanner.d.ts +0 -74
- package/dist/internal/machinePlanner.d.ts.map +0 -1
- package/dist/internal/machinePlanner.js +0 -797
- package/dist/internal/machinePlanner.js.map +0 -1
- package/dist/internal/machineProcess.d.ts.map +0 -1
- package/dist/internal/machineProcess.js +0 -181
- package/dist/internal/machineProcess.js.map +0 -1
- package/dist/internal/machineRuntime.d.ts.map +0 -1
- package/dist/internal/machineRuntime.js +0 -365
- package/dist/internal/machineRuntime.js.map +0 -1
- package/dist/reactivity.d.ts.map +0 -1
- package/dist/reactivity.js.map +0 -1
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effect-native command-model testing for live machine references.
|
|
3
|
+
*
|
|
4
|
+
* @since 4.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Cause from "effect/Cause";
|
|
7
|
+
import * as Data from "effect/Data";
|
|
8
|
+
import * as Deferred from "effect/Deferred";
|
|
9
|
+
import * as Duration from "effect/Duration";
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import * as Inspectable from "effect/Inspectable";
|
|
12
|
+
import * as Queue from "effect/Queue";
|
|
13
|
+
import * as Stream from "effect/Stream";
|
|
14
|
+
import { FastCheck, TestClock } from "effect/testing";
|
|
15
|
+
import * as Machine from "../../../Machine.js";
|
|
16
|
+
import { toArbitraryWithReport } from "./arbitrary.js";
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a command that sends one public event.
|
|
19
|
+
*
|
|
20
|
+
* @category constructors
|
|
21
|
+
* @since 4.0.0
|
|
22
|
+
*/
|
|
23
|
+
export const sendCommand = (event) => ({
|
|
24
|
+
_tag: "Send",
|
|
25
|
+
event
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Constructs a command that advances Effect's `TestClock`.
|
|
29
|
+
*
|
|
30
|
+
* @category constructors
|
|
31
|
+
* @since 4.0.0
|
|
32
|
+
*/
|
|
33
|
+
export const advanceCommand = (duration) => ({
|
|
34
|
+
_tag: "Advance",
|
|
35
|
+
duration
|
|
36
|
+
});
|
|
37
|
+
/**
|
|
38
|
+
* Constructs an idempotent command that stops the machine.
|
|
39
|
+
*
|
|
40
|
+
* @category constructors
|
|
41
|
+
* @since 4.0.0
|
|
42
|
+
*/
|
|
43
|
+
export const stopCommand = () => ({ _tag: "Stop" });
|
|
44
|
+
/**
|
|
45
|
+
* Constructs a no-op command used to synchronize with work enqueued by earlier
|
|
46
|
+
* commands. Its behavior is selected by the reference-model step.
|
|
47
|
+
*
|
|
48
|
+
* @category constructors
|
|
49
|
+
* @since 4.0.0
|
|
50
|
+
*/
|
|
51
|
+
export const checkpointCommand = (label) => ({
|
|
52
|
+
_tag: "Checkpoint",
|
|
53
|
+
label
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* Constructors for runtime synchronization policies.
|
|
57
|
+
*
|
|
58
|
+
* @category constructors
|
|
59
|
+
* @since 4.0.0
|
|
60
|
+
*/
|
|
61
|
+
export const RuntimeSynchronization = {
|
|
62
|
+
none: { _tag: "None" },
|
|
63
|
+
current: { _tag: "Current" },
|
|
64
|
+
next: { _tag: "Next" },
|
|
65
|
+
until: (predicate) => ({ _tag: "Until", predicate })
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Failure raised when an expected public change stream observation is absent.
|
|
69
|
+
*
|
|
70
|
+
* @category errors
|
|
71
|
+
* @since 4.0.0
|
|
72
|
+
*/
|
|
73
|
+
export class RuntimeObservationError extends Data.TaggedError("MachineTestRuntimeObservationError") {
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* A typed command-model failure retaining the successfully checked prefix.
|
|
77
|
+
*
|
|
78
|
+
* @category errors
|
|
79
|
+
* @since 4.0.0
|
|
80
|
+
*/
|
|
81
|
+
export class RuntimeCommandFailure extends Data.TaggedError("MachineTestRuntimeCommandFailure") {
|
|
82
|
+
}
|
|
83
|
+
const makeFailure = (options) => new RuntimeCommandFailure({
|
|
84
|
+
...options,
|
|
85
|
+
prefix: options.prefix.slice(),
|
|
86
|
+
attempted: options.attempted
|
|
87
|
+
});
|
|
88
|
+
const executeCommand = (ref, command) => {
|
|
89
|
+
switch (command._tag) {
|
|
90
|
+
case "Send":
|
|
91
|
+
return ref.send(command.event).pipe(Effect.match({
|
|
92
|
+
onFailure: (error) => ({ _tag: "SendRejected", error }),
|
|
93
|
+
onSuccess: () => ({ _tag: "SendAccepted" })
|
|
94
|
+
}));
|
|
95
|
+
case "Advance":
|
|
96
|
+
return TestClock.adjust(command.duration).pipe(Effect.as({ _tag: "ClockAdvanced" }));
|
|
97
|
+
case "Stop":
|
|
98
|
+
return ref.stop.pipe(Effect.as({ _tag: "Stopped" }));
|
|
99
|
+
case "Checkpoint":
|
|
100
|
+
return Effect.succeed({ _tag: "Checkpoint" });
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const synchronize = (ref, queue, policy, index, timeout) => {
|
|
104
|
+
const wait = (synchronization, effect) => TestClock.withLive(effect.pipe(Effect.timeout(timeout))).pipe(Effect.mapError((cause) => cause instanceof RuntimeObservationError
|
|
105
|
+
? cause
|
|
106
|
+
: new RuntimeObservationError({
|
|
107
|
+
index,
|
|
108
|
+
synchronization,
|
|
109
|
+
reason: "timeout",
|
|
110
|
+
message: `timed out after ${Duration.toMillis(timeout)}ms waiting for the expected published snapshot`
|
|
111
|
+
})));
|
|
112
|
+
switch (policy._tag) {
|
|
113
|
+
case "None":
|
|
114
|
+
return Effect.succeed({ snapshot: undefined, published: [] });
|
|
115
|
+
case "Current":
|
|
116
|
+
return ref.snapshot.pipe(Effect.map((snapshot) => ({ snapshot, published: [] })));
|
|
117
|
+
case "Next":
|
|
118
|
+
return wait("Next", Queue.take(queue).pipe(Effect.flatMap((entry) => entry._tag === "Snapshot"
|
|
119
|
+
? Effect.succeed({ snapshot: entry.snapshot, published: [entry.snapshot] })
|
|
120
|
+
: Effect.fail(new RuntimeObservationError({
|
|
121
|
+
index,
|
|
122
|
+
synchronization: "Next",
|
|
123
|
+
reason: "ended",
|
|
124
|
+
message: "the machine changes stream ended before publishing the expected snapshot"
|
|
125
|
+
})))));
|
|
126
|
+
case "Until":
|
|
127
|
+
return wait("Until", Effect.gen(function* () {
|
|
128
|
+
const published = [];
|
|
129
|
+
while (true) {
|
|
130
|
+
const entry = yield* Queue.take(queue);
|
|
131
|
+
if (entry._tag === "End") {
|
|
132
|
+
return yield* Effect.fail(new RuntimeObservationError({
|
|
133
|
+
index,
|
|
134
|
+
synchronization: "Until",
|
|
135
|
+
reason: "ended",
|
|
136
|
+
message: "the machine changes stream ended before a published snapshot matched the predicate"
|
|
137
|
+
}));
|
|
138
|
+
}
|
|
139
|
+
published.push(entry.snapshot);
|
|
140
|
+
if (policy.predicate(entry.snapshot)) {
|
|
141
|
+
return { snapshot: entry.snapshot, published };
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}));
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Runs typed commands against a live `MachineRef` and checks them against a
|
|
149
|
+
* supplied Effect-native reference model.
|
|
150
|
+
*
|
|
151
|
+
* The runner observes only public `MachineRef` behavior. In particular, a
|
|
152
|
+
* successful send means enqueue acceptance, not completed processing. A model
|
|
153
|
+
* must request `Next`/`Until` only when it predicts a publication, or use an
|
|
154
|
+
* explicit checkpoint to drain previously enqueued work. Machine emissions can
|
|
155
|
+
* be captured by the runtime service used by the machine and returned from the
|
|
156
|
+
* optional `inspect` effect.
|
|
157
|
+
*
|
|
158
|
+
* Typed failures and defects from model transitions, command execution,
|
|
159
|
+
* inspection, and assertions are retained as full `Cause` values. A cause
|
|
160
|
+
* containing only interruption is propagated as interruption so cancelling a
|
|
161
|
+
* property run cannot be mistaken for a machine counterexample.
|
|
162
|
+
*
|
|
163
|
+
* @category constructors
|
|
164
|
+
* @since 4.0.0
|
|
165
|
+
*/
|
|
166
|
+
export const runRuntimeCommands = (ref, commands, options) => Effect.scoped(Effect.gen(function* () {
|
|
167
|
+
const sequence = Array.from(commands);
|
|
168
|
+
const observationTimeout = options.observationTimeout ?? "1 second";
|
|
169
|
+
const observationTimeoutMillis = Duration.toMillis(observationTimeout);
|
|
170
|
+
if (!Number.isFinite(observationTimeoutMillis) || observationTimeoutMillis < 0) {
|
|
171
|
+
return yield* Effect.die(new Error("MachineTest.runRuntimeCommands expected observationTimeout to be a finite non-negative duration"));
|
|
172
|
+
}
|
|
173
|
+
const changes = yield* Queue.unbounded();
|
|
174
|
+
const ready = yield* Deferred.make();
|
|
175
|
+
yield* ref.changes.pipe(Stream.runForEach((snapshot) => Queue.offer(changes, { _tag: "Snapshot", snapshot }).pipe(Effect.andThen(Deferred.succeed(ready, undefined)), Effect.asVoid)), Effect.ensuring(Deferred.succeed(ready, undefined).pipe(Effect.andThen(Queue.offer(changes, { _tag: "End" })), Effect.asVoid)), Effect.forkScoped({ startImmediately: true }));
|
|
176
|
+
yield* Deferred.await(ready);
|
|
177
|
+
const initialEntry = yield* Queue.take(changes);
|
|
178
|
+
const initial = initialEntry._tag === "Snapshot" ? initialEntry.snapshot : yield* ref.snapshot;
|
|
179
|
+
const records = [];
|
|
180
|
+
let model = options.initialModel;
|
|
181
|
+
let lastSynchronized = initial;
|
|
182
|
+
let outstandingWorkUnknown = false;
|
|
183
|
+
const capture = (options) => Effect.catchCause(Effect.suspend(options.effect), (cause) => Cause.hasInterruptsOnly(cause)
|
|
184
|
+
? Effect.failCause(cause)
|
|
185
|
+
: Effect.fail(makeFailure({
|
|
186
|
+
phase: options.phase,
|
|
187
|
+
index: options.index,
|
|
188
|
+
command: options.command,
|
|
189
|
+
cause,
|
|
190
|
+
prefix: records,
|
|
191
|
+
...(options.attempted === undefined ? {} : { attempted: options.attempted })
|
|
192
|
+
})));
|
|
193
|
+
for (let index = 0; index < sequence.length; index++) {
|
|
194
|
+
const command = sequence[index];
|
|
195
|
+
const step = yield* capture({
|
|
196
|
+
phase: "model",
|
|
197
|
+
index,
|
|
198
|
+
command,
|
|
199
|
+
effect: () => options.transition(model, command, index)
|
|
200
|
+
});
|
|
201
|
+
model = step.model;
|
|
202
|
+
const result = yield* capture({
|
|
203
|
+
phase: "execution",
|
|
204
|
+
index,
|
|
205
|
+
command,
|
|
206
|
+
effect: () => executeCommand(ref, command)
|
|
207
|
+
});
|
|
208
|
+
const attemptedBeforeObservation = {
|
|
209
|
+
index,
|
|
210
|
+
command,
|
|
211
|
+
model,
|
|
212
|
+
expected: step.expected,
|
|
213
|
+
actual: {
|
|
214
|
+
result,
|
|
215
|
+
snapshot: undefined,
|
|
216
|
+
published: [],
|
|
217
|
+
inspected: undefined
|
|
218
|
+
}
|
|
219
|
+
};
|
|
220
|
+
const synchronized = yield* capture({
|
|
221
|
+
phase: "observation",
|
|
222
|
+
index,
|
|
223
|
+
command,
|
|
224
|
+
effect: () => synchronize(ref, changes, step.synchronize, index, observationTimeout),
|
|
225
|
+
attempted: attemptedBeforeObservation
|
|
226
|
+
});
|
|
227
|
+
const terminal = synchronized.snapshot !== undefined && synchronized.snapshot.status !== "active";
|
|
228
|
+
const previouslyOutstanding = outstandingWorkUnknown;
|
|
229
|
+
switch (step.synchronize._tag) {
|
|
230
|
+
case "None":
|
|
231
|
+
if (command._tag === "Advance" || command._tag === "Stop" ||
|
|
232
|
+
(command._tag === "Send" && result._tag === "SendAccepted"))
|
|
233
|
+
outstandingWorkUnknown = true;
|
|
234
|
+
break;
|
|
235
|
+
case "Next":
|
|
236
|
+
if (synchronized.snapshot !== undefined)
|
|
237
|
+
lastSynchronized = synchronized.snapshot;
|
|
238
|
+
outstandingWorkUnknown = terminal
|
|
239
|
+
? false
|
|
240
|
+
: previouslyOutstanding || command._tag === "Advance" ||
|
|
241
|
+
(command._tag === "Send" && result._tag === "SendAccepted");
|
|
242
|
+
break;
|
|
243
|
+
case "Until":
|
|
244
|
+
if (synchronized.snapshot !== undefined)
|
|
245
|
+
lastSynchronized = synchronized.snapshot;
|
|
246
|
+
outstandingWorkUnknown = false;
|
|
247
|
+
break;
|
|
248
|
+
case "Current":
|
|
249
|
+
if (terminal)
|
|
250
|
+
outstandingWorkUnknown = false;
|
|
251
|
+
if (!outstandingWorkUnknown && synchronized.snapshot !== undefined)
|
|
252
|
+
lastSynchronized = synchronized.snapshot;
|
|
253
|
+
break;
|
|
254
|
+
}
|
|
255
|
+
const inspectionContext = {
|
|
256
|
+
index,
|
|
257
|
+
command,
|
|
258
|
+
result,
|
|
259
|
+
ref,
|
|
260
|
+
snapshot: synchronized.snapshot,
|
|
261
|
+
published: synchronized.published
|
|
262
|
+
};
|
|
263
|
+
const attemptedBeforeInspection = {
|
|
264
|
+
...attemptedBeforeObservation,
|
|
265
|
+
actual: {
|
|
266
|
+
result,
|
|
267
|
+
snapshot: synchronized.snapshot,
|
|
268
|
+
published: synchronized.published,
|
|
269
|
+
inspected: undefined
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
const inspected = options.inspect === undefined
|
|
273
|
+
? undefined
|
|
274
|
+
: yield* capture({
|
|
275
|
+
phase: "inspection",
|
|
276
|
+
index,
|
|
277
|
+
command,
|
|
278
|
+
effect: () => options.inspect(inspectionContext),
|
|
279
|
+
attempted: attemptedBeforeInspection
|
|
280
|
+
});
|
|
281
|
+
const actual = {
|
|
282
|
+
result,
|
|
283
|
+
snapshot: synchronized.snapshot,
|
|
284
|
+
published: synchronized.published,
|
|
285
|
+
inspected
|
|
286
|
+
};
|
|
287
|
+
const record = {
|
|
288
|
+
index,
|
|
289
|
+
command,
|
|
290
|
+
model,
|
|
291
|
+
expected: step.expected,
|
|
292
|
+
actual
|
|
293
|
+
};
|
|
294
|
+
yield* capture({
|
|
295
|
+
phase: "assertion",
|
|
296
|
+
index,
|
|
297
|
+
command,
|
|
298
|
+
effect: () => options.assert({
|
|
299
|
+
...inspectionContext,
|
|
300
|
+
model,
|
|
301
|
+
expected: step.expected,
|
|
302
|
+
actual
|
|
303
|
+
}),
|
|
304
|
+
attempted: record
|
|
305
|
+
});
|
|
306
|
+
records.push(record);
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
commands: sequence,
|
|
310
|
+
initial,
|
|
311
|
+
records,
|
|
312
|
+
finalModel: model,
|
|
313
|
+
final: lastSynchronized,
|
|
314
|
+
synchronized: !outstandingWorkUnknown
|
|
315
|
+
};
|
|
316
|
+
}));
|
|
317
|
+
const validateCommandLength = (name, value) => {
|
|
318
|
+
if (!Number.isSafeInteger(value) || value < 0) {
|
|
319
|
+
throw new Error(`MachineTest.runtimeCommands expected ${name} to be a non-negative safe integer`);
|
|
320
|
+
}
|
|
321
|
+
};
|
|
322
|
+
/**
|
|
323
|
+
* Derives a shrinkable command sequence from public event schemas and explicit
|
|
324
|
+
* clock/stop/checkpoint command choices.
|
|
325
|
+
*
|
|
326
|
+
* This deliberately returns ordinary Effect FastCheck arbitraries instead of
|
|
327
|
+
* adapting the runner through `asyncModelRun`: the latter requires Promise
|
|
328
|
+
* callbacks and would erase Effect error and service channels.
|
|
329
|
+
*
|
|
330
|
+
* @category constructors
|
|
331
|
+
* @since 4.0.0
|
|
332
|
+
*/
|
|
333
|
+
export const runtimeCommands = (machine, options = {}) => {
|
|
334
|
+
const minCommands = options.minCommands ?? 0;
|
|
335
|
+
const maxCommands = options.maxCommands ?? 50;
|
|
336
|
+
validateCommandLength("minCommands", minCommands);
|
|
337
|
+
validateCommandLength("maxCommands", maxCommands);
|
|
338
|
+
if (minCommands > maxCommands) {
|
|
339
|
+
throw new Error("MachineTest.runtimeCommands expected minCommands to be less than or equal to maxCommands");
|
|
340
|
+
}
|
|
341
|
+
const reports = [];
|
|
342
|
+
const eventArbitraries = options.eventArbitrary === undefined
|
|
343
|
+
? machine.events.map((schema) => {
|
|
344
|
+
const derived = toArbitraryWithReport(schema);
|
|
345
|
+
reports.push(derived.report);
|
|
346
|
+
return derived.value;
|
|
347
|
+
})
|
|
348
|
+
: [];
|
|
349
|
+
const eventArbitrary = options.eventArbitrary ?? (eventArbitraries.length === 0
|
|
350
|
+
? undefined
|
|
351
|
+
: FastCheck.oneof(...eventArbitraries));
|
|
352
|
+
const commandArbitraries = [];
|
|
353
|
+
if (eventArbitrary !== undefined)
|
|
354
|
+
commandArbitraries.push(eventArbitrary.map(sendCommand));
|
|
355
|
+
if (options.includeAdvance !== false) {
|
|
356
|
+
const advanceArbitrary = options.advanceArbitrary ?? FastCheck.nat({ max: 60_000 });
|
|
357
|
+
commandArbitraries.push(advanceArbitrary.map(advanceCommand));
|
|
358
|
+
}
|
|
359
|
+
if (options.includeStop !== false)
|
|
360
|
+
commandArbitraries.push(FastCheck.constant(stopCommand()));
|
|
361
|
+
if (options.includeCheckpoint !== false)
|
|
362
|
+
commandArbitraries.push(FastCheck.constant(checkpointCommand()));
|
|
363
|
+
commandArbitraries.push(...options.additionalCommands ?? []);
|
|
364
|
+
if (commandArbitraries.length === 0) {
|
|
365
|
+
if (minCommands > 0) {
|
|
366
|
+
throw new Error("MachineTest.runtimeCommands cannot generate a non-empty command sequence without commands");
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
arbitrary: FastCheck.constant([]),
|
|
370
|
+
diagnostics: {
|
|
371
|
+
events: options.eventArbitrary !== undefined ? "override" : eventArbitraries.length === 0 ? "none" : "schema",
|
|
372
|
+
schemaReports: reports,
|
|
373
|
+
includesAdvance: false,
|
|
374
|
+
includesStop: false,
|
|
375
|
+
includesCheckpoint: false
|
|
376
|
+
}
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
return {
|
|
380
|
+
arbitrary: FastCheck.array(FastCheck.oneof(...commandArbitraries), {
|
|
381
|
+
minLength: minCommands,
|
|
382
|
+
maxLength: maxCommands
|
|
383
|
+
}),
|
|
384
|
+
diagnostics: {
|
|
385
|
+
events: options.eventArbitrary !== undefined ? "override" : eventArbitraries.length === 0 ? "none" : "schema",
|
|
386
|
+
schemaReports: reports,
|
|
387
|
+
includesAdvance: options.includeAdvance !== false,
|
|
388
|
+
includesStop: options.includeStop !== false,
|
|
389
|
+
includesCheckpoint: options.includeCheckpoint !== false
|
|
390
|
+
}
|
|
391
|
+
};
|
|
392
|
+
};
|
|
393
|
+
/**
|
|
394
|
+
* Formats a runtime transcript or failure as replayable line-oriented evidence.
|
|
395
|
+
*
|
|
396
|
+
* @category formatting
|
|
397
|
+
* @since 4.0.0
|
|
398
|
+
*/
|
|
399
|
+
export const formatRuntimeTranscript = (value) => {
|
|
400
|
+
const failure = value instanceof RuntimeCommandFailure;
|
|
401
|
+
const records = failure ? value.prefix : value.records;
|
|
402
|
+
const lines = [
|
|
403
|
+
`commands: ${Inspectable.toStringUnknown(failure ?
|
|
404
|
+
[
|
|
405
|
+
...value.prefix.map((record) => record.command),
|
|
406
|
+
value.command
|
|
407
|
+
] :
|
|
408
|
+
value.commands, 0)}`
|
|
409
|
+
];
|
|
410
|
+
for (const record of records) {
|
|
411
|
+
lines.push(`command ${record.index}: command=${Inspectable.toStringUnknown(record.command, 0)} ` +
|
|
412
|
+
`model=${Inspectable.toStringUnknown(record.model, 0)} ` +
|
|
413
|
+
`expected=${Inspectable.toStringUnknown(record.expected, 0)} ` +
|
|
414
|
+
`result=${Inspectable.toStringUnknown(record.actual.result, 0)} ` +
|
|
415
|
+
`snapshot=${Inspectable.toStringUnknown(record.actual.snapshot, 0)} ` +
|
|
416
|
+
`published=${Inspectable.toStringUnknown(record.actual.published, 0)} ` +
|
|
417
|
+
`inspected=${Inspectable.toStringUnknown(record.actual.inspected, 0)}`);
|
|
418
|
+
}
|
|
419
|
+
if (failure) {
|
|
420
|
+
if (value.attempted !== undefined) {
|
|
421
|
+
lines.push(`attempted ${value.attempted.index}: command=${Inspectable.toStringUnknown(value.attempted.command, 0)} ` +
|
|
422
|
+
`model=${Inspectable.toStringUnknown(value.attempted.model, 0)} ` +
|
|
423
|
+
`expected=${Inspectable.toStringUnknown(value.attempted.expected, 0)} ` +
|
|
424
|
+
`result=${Inspectable.toStringUnknown(value.attempted.actual.result, 0)} ` +
|
|
425
|
+
`snapshot=${Inspectable.toStringUnknown(value.attempted.actual.snapshot, 0)} ` +
|
|
426
|
+
`published=${Inspectable.toStringUnknown(value.attempted.actual.published, 0)} ` +
|
|
427
|
+
`inspected=${Inspectable.toStringUnknown(value.attempted.actual.inspected, 0)}`);
|
|
428
|
+
}
|
|
429
|
+
lines.push(`failure: phase=${value.phase} index=${value.index} command=${Inspectable.toStringUnknown(value.command, 0)} ` +
|
|
430
|
+
`cause=${Inspectable.toStringUnknown(value.cause, 0)}`);
|
|
431
|
+
}
|
|
432
|
+
else {
|
|
433
|
+
lines.push(`final: synchronized=${String(value.synchronized)} snapshot=${Inspectable.toStringUnknown(value.final, 0)}`);
|
|
434
|
+
}
|
|
435
|
+
return lines.join("\n");
|
|
436
|
+
};
|
|
437
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../../src/internal/testing/machine/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Property-based scenario generation and planner trace utilities.
|
|
3
|
+
*
|
|
4
|
+
* @since 4.0.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import * as Machine from "../../../Machine.js";
|
|
8
|
+
import type { Coverage, ObservedGraph, RunError, RunFailure, RunServices, Scenario, ScenarioOptions, Scenarios, Trace, VerificationViolation, VerifyOptions } from "../../../testing/MachineTest.js";
|
|
9
|
+
import type { EnsureExecutable } from "../../machine/readiness.js";
|
|
10
|
+
import type { FiniteModel } from "./finiteModel.js";
|
|
11
|
+
import * as ReferenceModel from "./referenceModel.js";
|
|
12
|
+
export { advanceCommand, checkpointCommand, formatRuntimeTranscript, runRuntimeCommands, type RuntimeAssertionContext, type RuntimeCommand, type RuntimeCommandActual, RuntimeCommandFailure, type RuntimeCommandRecord, type RuntimeCommandResult, type RuntimeCommands, runtimeCommands, type RuntimeCommandsDiagnostics, type RuntimeCommandsOptions, type RuntimeInspectionContext, type RuntimeModelOptions, type RuntimeModelStep, RuntimeObservationError, RuntimeSynchronization, type RuntimeTranscript, sendCommand, stopCommand } from "./runtime.js";
|
|
13
|
+
export type { SchemaArbitraryOpaqueFilterWarning, SchemaArbitraryReport, SchemaArbitraryWarning } from "./arbitrary.js";
|
|
14
|
+
export { compileModel, type FiniteAtomicState, type FiniteAutomaticTransition, type FiniteCompoundState, type FiniteEventTransition, type FiniteFinalState, type FiniteHistoryMutation, type FiniteHistoryScenario, type FiniteHistoryState, type FiniteHistoryTransfer, type FiniteModel, type FiniteModelDiagnostics, type FiniteModelOptions, type FiniteModels, finiteModels, type FiniteParallelState, type FiniteState, type FiniteTransition, type FiniteTransitionTrigger } from "./finiteModel.js";
|
|
15
|
+
export { ModelVerificationError, type ModelVerificationField, type ModelVerificationLocation, type ModelVerificationMismatch, type ReferenceCompletion, type ReferenceHistoryRecord, type ReferenceInitialStep, type ReferenceMicrostep, type ReferenceState, type ReferenceStateValue, type ReferenceStep, type ReferenceTrace, type ReferenceTransition } from "./referenceModel.js";
|
|
16
|
+
export declare const interpretModel: (model: FiniteModel, events: ReadonlyArray<string>) => ReferenceModel.ReferenceTrace;
|
|
17
|
+
type AnyMachine = Machine.Machine.Any;
|
|
18
|
+
type ReadyMachine<M extends AnyMachine> = M & EnsureExecutable<Machine.Machine.States<M>, Machine.Machine.UnhandledStates<M>, Machine.Machine.OutputStates<M>>;
|
|
19
|
+
export declare const scenarios: <M extends AnyMachine>(machine: M, options?: ScenarioOptions<M>) => Scenarios<M>;
|
|
20
|
+
export declare const verifyModel: <M extends AnyMachine>(model: FiniteModel, actualTrace: Trace<M>) => Effect.Effect<void, ReferenceModel.ModelVerificationError>;
|
|
21
|
+
export declare const run: <M extends AnyMachine>(machine: ReadyMachine<M>, scenario: Scenario<M>) => Effect.Effect<Trace<M>, RunFailure<RunError<M>, M>, RunServices<M>>;
|
|
22
|
+
export declare const coverage: <M extends AnyMachine>(machine: M, traceOrTraces: Trace<M> | ReadonlyArray<Trace<M>>) => Coverage<M>;
|
|
23
|
+
export declare const observedGraph: <M extends AnyMachine>(machine: M, traceOrTraces: Trace<M> | ReadonlyArray<Trace<M>>) => Effect.Effect<ObservedGraph<M>, Machine.MachineSchemaEncodeError, Machine.Machine.SnapshotEncodingServices<Machine.Machine.States<M>>>;
|
|
24
|
+
declare const VerificationError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
|
|
25
|
+
readonly _tag: "MachineTestVerificationError";
|
|
26
|
+
} & Readonly<A>;
|
|
27
|
+
export declare class VerificationError extends VerificationError_base<{
|
|
28
|
+
readonly violations: ReadonlyArray<VerificationViolation>;
|
|
29
|
+
}> {
|
|
30
|
+
}
|
|
31
|
+
export declare const verify: <M extends AnyMachine>(machine: M, trace: Trace<M>, options?: VerifyOptions) => Effect.Effect<void, VerificationError>;
|
|
32
|
+
export declare const formatTrace: <M extends AnyMachine, Cause>(trace: Trace<M> | RunFailure<Cause, M>) => string;
|
|
33
|
+
//# sourceMappingURL=verification.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verification.d.ts","sourceRoot":"","sources":["../../../../src/internal/testing/machine/verification.ts"],"names":[],"mappings":"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"}
|