Fix failure

This commit is contained in:
Andras Schmelczer 2026-09-27 14:29:36 +01:00
commit 909096969a

View file

@ -7,23 +7,48 @@ import type {
} from "../../deterministic-tests/src/test-definition";
import { Random } from "../../test-support/random";
export interface Trace {
version: 1 | 2;
program?: Program;
interface TraceMetadata {
seed: number;
iterations: number;
}
export interface LegacyTrace extends TraceMetadata {
version: 1;
/** Old traces omit this and retain their original two-client behavior. */
clients?: number;
steps: TestStep[];
}
export interface StatefulTrace extends TraceMetadata {
version: 2;
clients: number;
program: Program;
/** Older artifacts included these; replay always compiles the program. */
steps?: TestStep[];
}
export type Trace = LegacyTrace | StatefulTrace;
/** Full-state checkpoints can exceed V8's string limit on long campaigns.
* Persist their source program once, including when rewriting old artifacts. */
export function serializeTrace(trace: Trace): string {
return JSON.stringify(
trace.version === 2 ? { ...trace, steps: undefined } : trace,
null,
2
);
}
type Document = ExpectedDocument & { content: string };
/** Concrete actions and independent expected states are serialized together.
* Every round checks the whole history, including earlier bytes and UUIDs.
* A shuffled cycle covers nine actions; most revisit existing documents.
*/
export function generateLegacyTrace(seed: number, iterations: number): Trace {
export function generateLegacyTrace(
seed: number,
iterations: number
): LegacyTrace {
const random = new Random(seed);
const clients = 2 + random.int(2);
const steps: TestStep[] = [];
@ -297,12 +322,13 @@ export function generateLegacyTrace(seed: number, iterations: number): Trace {
}
export function traceTest(trace: Trace): TestDefinition {
const program = trace.version === 2 ? trace.program : undefined;
if (
![1, 2].includes(trace.version) ||
(trace.version === 1 &&
(!Array.isArray(trace.steps) || !trace.steps.length)) ||
(trace.version === 2 &&
(!trace.program || trace.clients !== trace.program.clients)) ||
(!program || trace.clients !== program.clients)) ||
(trace.clients !== undefined &&
(!Number.isInteger(trace.clients) || trace.clients < 2))
)
@ -310,8 +336,7 @@ export function traceTest(trace: Trace): TestDefinition {
return {
clients: trace.clients ?? 2,
description: `Seed ${trace.seed}; ${trace.iterations} generated rounds`,
steps:
trace.version === 2 ? compileProgram(trace.program!) : trace.steps
steps: trace.version === 2 ? compileProgram(trace.program) : trace.steps
};
}