Check the reference corpus in, so the build stops needing the Go submodule

All 41 .bas/.txt pairs copied byte for byte from basicinterpreter@d76162c into
tests/reference/, plus the Commodore font into assets/fonts/ -- the two things
that tied the build to deps/basicinterpret. Both were verified cmp-identical
to the submodule copies.

This reverses a decision that was deliberate and correct at the time: the
corpus was driven in place because copying a submodule's corpus guarantees
drift. Overruled on purpose -- the Go dependency is being deprecated, and a
build that cannot run its acceptance suite without cloning the implementation
it replaced is not finished. tests/reference/README.md records what the drift
now costs and that those expectations are never edited.

Checked rather than assumed: both configurations configure, build and pass
from scratch with deps/basicinterpret moved out of the tree entirely.

The submodule is kept as the behavioural spec, which is a real use. The font
came with an open licence question; assets/fonts/PROVENANCE.md states it.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-31 12:35:40 -04:00
parent bf9cf85130
commit eb5374d212
92 changed files with 503 additions and 50 deletions

View File

@@ -15,8 +15,10 @@ jobs:
uses: actions/checkout@v4
with:
# Not recursive, deliberately. The top-level build needs
# deps/libakerror and deps/libakstdlib (via add_subdirectory) and
# deps/basicinterpret (the golden corpus is driven in place from it).
# deps/libakerror and deps/libakstdlib, via add_subdirectory, and
# nothing else: the golden corpus and the Commodore font now live in
# this repository (tests/reference/ and assets/fonts/), so
# deps/basicinterpret is no longer a build dependency at all.
# It does *not* need deps/libakgl, which is guarded behind
# AKBASIC_WITH_AKGL and defaults OFF -- and recursing into it would
# clone SDL, SDL_image, SDL_mixer, SDL_ttf and jansson for a target
@@ -32,12 +34,13 @@ jobs:
run: |
cmake -S . -B build
cmake --build build --parallel
# The suite is 70 cases: 41 golden files byte-compared against the Go
# reference's own corpus, 5 local golden cases for verbs the reference
# never implemented, 21 unit tests, 2 embedding examples, and 1
# known-failing test that asserts the *correct* contract for defects
# carried over from the reference (TODO.md section 6). A green run
# therefore does not mean defect-free -- see AKBASIC_KNOWN_FAILING_TESTS.
# The suite is 78 cases: 41 golden files byte-compared against the Go
# reference's own corpus (checked in at tests/reference/, see its README),
# 9 local golden cases for verbs the reference never implemented, 25 unit
# tests, 2 embedding examples, and 1 known-failing test that asserts the
# *correct* contract for defects carried over from the reference (TODO.md
# section 6). A green run therefore does not mean defect-free -- see
# AKBASIC_KNOWN_FAILING_TESTS.
#
# AKBASIC_WITH_AKGL is off here, which is the point rather than an
# omission: this job is what proves the interpreter builds and passes on a
@@ -96,13 +99,14 @@ jobs:
run: |
sudo apt-get update -y
sudo apt-get install -y cmake gcc gcovr
# The gate is a ratchet, not a target: src/ sits at 93.5% of lines and
# 97.8% of functions, so 90 fails on a real regression (a test deleted, or
# The gate is a ratchet, not a target: src/ sits at 94.6% of lines and
# 98.6% of functions, so 90 fails on a real regression (a test deleted, or
# new untested code added) without tripping over rounding.
#
# The akbasic_akgl target is not in this figure. It is not built in a
# default configuration, and instrumenting it would drag SDL into the
# coverage job for four thin adaptors.
# The akbasic_akgl and akbasic_frontend targets are not in this figure.
# Neither is built in a default configuration, and instrumenting them would
# drag SDL into the coverage job for four thin adaptors and a host. What
# covers them instead is the akgl_build job below.
#
# There is deliberately no branch gate. Branch coverage reads about 18%
# and is not a meaningful number here, for the reason libakgl's and
@@ -235,9 +239,9 @@ jobs:
uses: actions/checkout@v4
with:
# The harness copies the repo and configures a build inside the copy,
# so it needs the same submodules the main build does -- including
# deps/basicinterpret, because the golden corpus is part of what kills
# mutants.
# so it needs the same submodules the main build does. The golden
# corpus is part of what kills mutants and it is checked in now, so
# that is libakerror and libakstdlib and nothing else.
submodules: true
- name: dependencies
run: |