Skip to content

Build out volamos's own CI-safe test corpus (own tools/compare_amitools_suite.py's real coverage, MIT/Apache-licensed) #60

Description

@sidick

Motivation

tools/compare_amitools_suite.py (PR #50) has been the single highest-value bug-finding tool this project has: across a handful of sessions it found and led to fixing real volamos bugs in dos.library (#45, #46, #47, #55), exec.library/formatting (#48), and the math libraries (#51, #53) -- more real bugs than fixtures/'s own hand-authored corpus (tools/compare_vamos.py, ~10 fixtures) has found in its entire history. It also correctly attributed several other differences to vamos's own divergences (#49, #52, #54) rather than volamos bugs.

But it's local-only, permanently -- amitools is GPLv2, volamos is MIT/Apache-2.0, so test/bin/test/src/test/data can never be vendored or run in CI (see that script's own module doc). Its bug-finding power comes from covering real library surface fixtures/ doesn't touch at all: AnchorPath/MatchFirst/MatchNext, ReadArgs/FindArg, Seek, RawDoFmt's less-common format specifiers, and all four math libraries (mathffp/mathtrans/mathieeedoubbas/mathieeedoubtrans). None of that is exercised by anything that runs in CI today.

Proposal

Grow fixtures/'s own corpus (hand-authored .s/vasm sources + gen_*.py, exactly the existing pattern in fixtures/README.md) to cover the same kinds of calls amitools' corpus exercises -- not by copying amitools' own test source (that would just re-import the GPL problem), but by writing new, project-owned equivalents from the NDK autodocs directly, the same way the existing fixtures were built. Candidates, roughly in the order amitools' corpus proved valuable this session:

Each new fixture should go through tools/compare_vamos.py (the existing CI-safe two-way harness) from day one, so growing this corpus directly grows CI coverage -- no separate promotion step needed, unlike compare_amitools_suite.py's GPL-blocked one.

Multi-version and multi-implementation verification (own harness, not GPL-blocked)

Because this corpus is volamos's own (not GPL-encumbered), it can be run against more than just vamos:

  • Multiple real Kickstart versions via Copperline -- 1.3, 2.0, 3.0, 3.1, and 3.2 -- not just the single 3.1 (40.72) ROM this session's investigations used. Use Copperline's [lide] device (a lide.device-compatible Zorro II IDE board) for this, not [ide]: [ide] needs a Gayle or A4000 IDE port, so it only works on the A600/A1200/A3000/A4000 models this session used, but [lide] "works on any machine model", explicitly including Kickstart 1.3, since it's a Zorro II expansion board rather than chipset-integrated IDE -- some of the target Kickstart versions predate Gayle IDE entirely. Same directory-mount-to-in-memory-FFS/OFS trick applies ([lide] drive0 = { path = "...", name = "...", bootpri = N, filesystem = "ffs"|"ofs" } -- a genuine in-memory volume with a real Rigid Disk Block, discarded on exit; see the MatchFirst/MatchNext's ap_Buf strips the device prefix entirely instead of only deduplicating a doubled one #46/MatchFirst/MatchNext: APF_DirChanged (bit 6) set by volamos but never by vamos -- needs real-hardware arbitration #58 fix commits for the [ide] version of this recipe), so the same fixture corpus can run against every Kickstart version through one consistent storage config. This would catch real version-skew bugs (a call behaving differently across OS versions, or a fixture that accidentally only passes on the one version it was written against) that a single-ROM check can't. Only Kickstart 3.1 (40.72) is confirmed available locally right now (~/src/amibake/assets/hyperion); 1.3/2.0/3.0/3.2 need sourcing before this dimension can run end-to-end -- not a blocker for starting the corpus itself (target 3.1 first, matching volamos's own stated Phase 1 compatibility target), but worth tracking as a follow-up once fixtures exist to run against them.
  • AROS as a further, zero-setup oracle -- Copperline bundles its own AROS Kickstart replacement by default (no ROM file needed, works out of the box), and as a free/open reimplementation it sidesteps any Kickstart-ROM redistribution question entirely, unlike the real Hyperion-copyrighted ROMs (which stay local-only, never bundled with volamos, same posture as this project's existing amitools/AmiBake assets).

Non-goals

  • Not a replacement for compare_amitools_suite.py -- keep running that locally too; it's still valuable for cross-checking against a second, independently-authored corpus and for the specific compiler-variety angle (gcc/sc/vc/agcc) fixtures/ doesn't have.
  • Not attempting to match every one of amitools' ~34 test programs one-for-one -- prioritize by what's found real bugs already (see the ordering above) over exhaustive parity.

Suggested first step

Start with the AnchorPath fixture -- it's the single area that's found the most real bugs (#14, #46, #58) and is completely unrepresented in fixtures/ today.

🤖 Filed by Claude Code at the user's request

https://claude.ai/code/session_0171vaHw8HbkiLzUph9bAA2p

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions