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:
49
tests/reference/README.md
Normal file
49
tests/reference/README.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# The reference interpreter's own test corpus
|
||||
|
||||
These 41 `.bas` files and their 41 `.txt` expectations are **not this project's tests.** They
|
||||
are a byte-for-byte copy of the acceptance corpus belonging to the Go implementation this
|
||||
interpreter was ported from:
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
| Source | `https://source.starfort.tech/andrew/basicinterpreter`, `tests/` |
|
||||
| Copied at | commit `d76162cb37eeaccddae2cf6cab7af7bc8175d6d2` ("Update README.md") |
|
||||
| Copied on | 2026-07-31 |
|
||||
| Verified | every file `cmp`-identical to the submodule at the time of the copy |
|
||||
|
||||
They are registered as the `golden_*` CTest cases and run against `basic` on every build, in
|
||||
both the default and the `-DAKBASIC_WITH_AKGL=ON` configurations.
|
||||
|
||||
## Why they are a copy now, when they deliberately were not
|
||||
|
||||
Until 2026-07-31 these were driven *in place* out of `deps/basicinterpret`, and the reasoning
|
||||
was written down in `CMakeLists.txt`: the corpus is a submodule, and copying a submodule's
|
||||
corpus guarantees drift.
|
||||
|
||||
That reasoning was sound. It was overruled on purpose, because the Go dependency is being
|
||||
deprecated and a build that cannot run its own acceptance suite without cloning the
|
||||
implementation it replaced is not finished.
|
||||
|
||||
**What the change costs, stated plainly so nobody has to rediscover it:** if the Go
|
||||
implementation ever gains a test, this directory will not. There is no longer anything
|
||||
watching for that. The trade is deliberate — the Go project is the thing being retired, so a
|
||||
corpus that stops tracking it is a corpus that stopped tracking something that stopped moving.
|
||||
|
||||
## The rule for editing these
|
||||
|
||||
**Don't.**
|
||||
|
||||
This directory is a *record of what the Go implementation did*, and it is what makes the claim
|
||||
"reproduces the reference byte for byte" checkable at all. A failure here means this
|
||||
interpreter's behaviour changed, and the answer is to change this interpreter or to record a
|
||||
deliberate deviation in `TODO.md` §5 — never to edit the expectation to match.
|
||||
|
||||
New cases for this project's own behaviour go in `tests/language/`, which is registered under
|
||||
`local_*` for exactly this reason: the prefix says which corpus a failure came from, and a diff
|
||||
that touches `tests/reference/` stands out as the thing it is.
|
||||
|
||||
There is one case worth knowing about before anybody "fixes" it.
|
||||
`examples/strreverse.bas` names a variable `INPUT$`, which a real Commodore 128 would refuse
|
||||
and which this interpreter accepts only because the reference's reserved-word check never
|
||||
fires. That is `TODO.md` §6 item 16, and it is the reason that item is filed as a decision
|
||||
rather than a defect: making the check work costs this case.
|
||||
Reference in New Issue
Block a user