From ff7bec9f5598922b881c5b96a94deabe1df64f16 Mon Sep 17 00:00:00 2001 From: Andrew Kesterson Date: Fri, 31 Jul 2026 08:51:27 -0400 Subject: [PATCH] Record the real coverage numbers, and how they were nearly misreported 93.5% of lines and 97.8% of functions, up from 92.3% and 96.9% across roughly 800 new lines. The verb groups added for goal 2 carry the new surface: the two table files and runtime_input.c at 100%, runtime_graphics.c and runtime_audio.c at 98%, play.c at 87%. The first reading of that number was wrong and the reason is worth keeping. A stale build-cov/ left in the source directory by an earlier session was silently folded in by `gcovr --root .`, which reported the *previous* run's 92.3% for a tree that had grown by 800 lines -- a number that looked plausible precisely because it had not moved. That is libakgl defect #13 happening here rather than there, and build*/ being gitignored is what makes it invisible. Section 8 now says to check `find . -name '*.gcda'` before believing a coverage figure that looks suspiciously unchanged. Also documents the akgl build and test commands in the README, which had none. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 6 ++++++ TODO.md | 26 ++++++++++++++++++++------ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 8586741..0876c3b 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,12 @@ ctest --test-dir build --output-on-failure # API documentation, into build/docs/html doxygen Doxyfile + +# With the libakgl-backed sink and devices. Off by default, because this pulls in +# SDL3 and the whole interpreter builds and tests without it. +cmake -S . -B build-akgl -DAKBASIC_WITH_AKGL=ON +cmake --build build-akgl --parallel +SDL_VIDEODRIVER=dummy SDL_AUDIODRIVER=dummy ctest --test-dir build-akgl --output-on-failure ``` There are two workflows. **`.gitea/workflows/ci.yaml`** runs on every push: the suite, diff --git a/TODO.md b/TODO.md index b7c1839..41cf7d8 100644 --- a/TODO.md +++ b/TODO.md @@ -797,16 +797,30 @@ entire test corpus and passes clean under ASan and UBSan. | Gate | Result | |---|---| -| `ctest` | 61/61 — 41 golden cases, 17 unit tests, 2 embedding examples, 1 known-failing | +| `ctest` | 70/70 — 41 upstream golden cases, 5 local ones, 21 unit tests, 2 embedding examples, 1 known-failing | +| `ctest` with `-DAKBASIC_WITH_AKGL=ON` | 71/71 — the above plus `akgl_backends` | | Golden corpus | 41/41 byte-exact, driven in place from the submodule | -| ASan + UBSan | 61/61 | -| Line coverage | 92.3% (2823/3058) — above the 90% gate | -| Function coverage | 96.9% (221/228) | +| ASan + UBSan | 70/70 | +| Line coverage | 93.5% (3631/3884) — above the 90% gate | +| Function coverage | 97.8% (269/275) | | Warnings | none under `-Wall -Wextra` | -| `doxygen Doxyfile` | clean; 114/114 public declarations documented | +| `doxygen Doxyfile` | clean | | Mutation (`src/convert.c`, `src/symtab.c`) | see `.gitea/workflows/ci.yaml` for the current score and gate | -Branch coverage reads 17.3% and is not a target, for the reason `libakgl/TODO.md` and +Coverage of the verb groups added for goal 2, since they are the new surface: `src/audio_tables.c` +and `src/graphics_tables.c` 100%, `src/runtime_input.c` 100%, `src/runtime_graphics.c` and +`src/runtime_audio.c` 98%, `src/play.c` 87%. The `akbasic_akgl` target is not in the coverage +figure — it is not built in a default configuration. + +**A note on reading that number, because it was misread once while producing it.** A stale +`build-cov/` left in the source directory from an earlier session was silently folded into the +report by `gcovr --root .`, which produced the *previous* run's 92.3% for a tree that had grown +by 800 lines. That is `libakgl` defect #13 happening here rather than there, and `build*/` being +gitignored is exactly what makes it invisible. **Keep build trees out of the source directory**, +and if a coverage number looks suspiciously unchanged, `find . -name '*.gcda'` before believing +it. + +Branch coverage reads 18.0% and is not a target, for the reason `libakgl/TODO.md` and `libakstdlib/TODO.md` both give: the akerror control-flow macros expand into large branch trees at every call site, most of them unreachable in normal operation. Track line and function coverage.