Files
Joseph MattielloandClaude Opus 5 448deafa5e test(texdump): contract-freeze golden list + inertness/engine gates in make test
One binary (test/tools/test_texdump, in make test via the in-tree
test/roms/yarc.j64 so it never skips) runs five sessions and asserts:

- contract_freeze: manifest hash set equals the committed golden list
  (test/expected/texdump_yarc.txt, 28 hashes) — the CI tripwire that
  makes the day-one identity contract real
- determinism: two consecutive dump-on runs, identical sets
- engine_independence: fast vs accurate blitter, identical sets
- inertness_on: per-frame framebuffer hashes AND savestate digests at
  frames 300/600 identical dump-on vs dump-off
- png_validity: signature, IHDR dims vs manifest, every chunk CRC-32
  via src/core/crc32.c — no external decoder
- palette_not_identity: a CLUT-change re-blit of known bytes mints no
  new hash and appends exactly one sighting row

No in-tree public ROM blits more than its two boot-time code copies
with SRCEN (yarc and jagniccc both render via the OP — measured), so
instead of the spec's second-ROM fallback the tool drives a synthetic
blit battery through the real bus/launch path (JaguarWriteLong ->
BlitterWriteWord -> TexDumpLaunch, TEST_EXPORTS ABI): 26 scripted
tiles across 1/2/4/8/16/32bpp and both source channels.

The fast-blitter session runs LAST: a fast->accurate engine flip
leaves cross-load static residue that moves the next session's
savestate digest even with texture dump never enabled (pre-existing
leak, reproduced independently; see the run-order note in the tool).

test_blitter_mmio gains the texdump stubs its standalone link now
needs; test_option_visibility asserts the 16bpp knob is hidden while
the dump option sits at its disabled default.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-17 20:59:54 -04:00
..