diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-28 17:03:15 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:15 -0300 |
| commit | 3267d276ab2553adb412183eb92390ed579b494f (patch) | |
| tree | 060a631c88777cea9d022bd0713629b4e033fb78 /build/snap.zig | |
| parent | 8509453c2fa78357187f1c4a7e99bfddf29027d8 (diff) | |
| download | pardes-3267d276ab2553adb412183eb92390ed579b494f.tar.gz pardes-3267d276ab2553adb412183eb92390ed579b494f.zip | |
zig build monkey: random snapshot scripts hunting panics
test/monkey.zig (Zig, as the project's tooling is): one random .snap per
seed, over bad-UTF-8, wide-glyph and long files: keys, leader bursts,
typing (an alphabet with no path characters), workspace words run by a
middle click (Newcol for narrow panes, Find and Grep for prompts, long
prompt text), presses, drags, wheel, hover, and resizes down to a cell.
pardes-snap runs it with --update; a panic is a record in the app's crash
file (in the script's fake home: seen even when the crash cut the script
short) or a `.zig:N:N: 0x` frame of the app's (not the harness's) in
its report or captured grid, and a hit keeps the script, captures and log
under --out (default /tmp/pardes-monkey). A seed always makes the same
script (tested), so --from=N replays one. Not a gate. README documents it
next to snap.
No Shader line: the tty has no post chain; the core fuzz in src/draw.zig
covers the compile-error notice at a gui's metrics.
80 seeds x 70 steps: no panic.
Diffstat (limited to 'build/snap.zig')
| -rw-r--r-- | build/snap.zig | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/build/snap.zig b/build/snap.zig index 6b3d2104..7aa06884 100644 --- a/build/snap.zig +++ b/build/snap.zig @@ -49,6 +49,25 @@ pub fn addTty(b: *std.Build, opts: struct { run_snap.has_side_effects = true; const snap_step = b.step("snap", "run the snapshot parity suite (-- --update regenerates goldens)"); snap_step.dependOn(&run_snap.step); + // Random scripts through pardes-snap, hunting panics (test/monkey.zig): + // not a gate, it is slow and random over seeds; a seed replays. + const monkey = b.addExecutable(.{ + .name = "pardes-monkey", + .root_module = b.createModule(.{ + .target = opts.target, + .optimize = opts.optimize, + .root_source_file = b.path("test/monkey.zig"), + .link_libc = true, + }), + }); + const run_monkey = b.addRunArtifact(monkey); + run_monkey.addArtifactArg(snap); + run_monkey.addArtifactArg(opts.exe); + if (b.args) |args| run_monkey.addArgs(args); + run_monkey.has_side_effects = true; + b.step("monkey", "random snapshot scripts hunting panics (-- <seeds> [steps] [--from=N] [--out=DIR])").dependOn(&run_monkey.step); + const monkey_tests = b.addTest(.{ .root_module = monkey.root_module }); + b.step("monkey-test", "test the monkey's generator and panic detector").dependOn(&b.addRunArtifact(monkey_tests).step); const run_driver_test = b.addRunArtifact(snap); run_driver_test.addArg("--self-test"); run_driver_test.has_side_effects = true; |
