Files
2026-05-27 23:47:53 +01:00

46 lines
1.3 KiB
TypeScript

import { describe, it } from "@suaveplan/testing/runner";
import * as fc from "fast-check";
import {
createCommand,
executeCommand,
undoCommand,
} from "../../src/command/command.js";
interface State {
x: number;
y: number;
label: string;
}
describe("property: command round-trip", () => {
it("execute then undo restores state for arbitrary closures", {
timeout: 30000,
}, () => {
fc.assert(
fc.property(
fc.record({
x: fc.integer(),
y: fc.integer(),
label: fc.string(),
}),
fc.integer({ min: 1, max: 100 }),
(initial, delta) => {
const cmd = createCommand<State>(
"Transform",
(s) => ({ ...s, x: s.x + delta }),
(s) => ({ ...s, x: s.x - delta })
);
const after = executeCommand(initial, cmd);
const back = undoCommand(after, cmd);
return (
back.x === initial.x &&
back.y === initial.y &&
back.label === initial.label
);
}
),
{ numRuns: 200 }
);
});
});