tests: ratchet the opaque ITEM COUNT, not the percentage; census baseline 538
The coverage ratchet reads `pct >= 99.99`, and with the last carried bodies typed it cannot usefully be raised: the only opaque items left are the MT19937 block's two in every save, so the number is 2/items and it still ranges from 99.99400 on a 532 KB save to 99.99746 on a 1.17 MB one. Moving the bar to 99.995 would fail a save that types perfectly and pass a save twice its size that had picked up a whole new opaque body. A percentage ratchet on a fixed-size debt is a ratchet on save size. So the percentage stays where it is and a stronger line goes beside it: the opaque set must be exactly the two RNG items. That breaks on the save that has the new body, and `opaque_by_tag` names it. test_domains: 43 saves give 755 fields observed, 538 varying, 217 constant, against a baseline of 490 measured at 22 saves. Nineteen of the new fields are the bodies typed in the previous commit and only two of them (FTPShID, FTPDesID) have ever been seen to move -- which is why the constants grew faster than the varying fields, and is worth leaving visible.
This commit is contained in:
parent
076f71439d
commit
00e9266476
2 changed files with 21 additions and 1 deletions
|
|
@ -124,7 +124,17 @@ int main() {
|
||||||
// 2026-09-09, 22 saves: 724 fields observed, 490 vary, 234 do not. Nearly a
|
// 2026-09-09, 22 saves: 724 fields observed, 490 vary, 234 do not. Nearly a
|
||||||
// third of the format we call "99.99% typed" has been seen holding exactly
|
// third of the format we call "99.99% typed" has been seen holding exactly
|
||||||
// one value. `tscr` was one of those 234 until a one-turn tech moved it.
|
// one value. `tscr` was one of those 234 until a one-turn tech moved it.
|
||||||
const size_t kVaryingBaseline = 490;
|
//
|
||||||
|
// 2026-09-09, 43 saves (lane DW): 755 fields observed, 538 vary, 217 do not.
|
||||||
|
// The corpus doubled and the census grew by 31 fields, of which 19 are this
|
||||||
|
// lane's newly typed bodies -- the `usp`/`usc` pair of a name-generator record,
|
||||||
|
// the twelve of a `Sprj` back-engineering project, and the five of a stored
|
||||||
|
// formation point. Only two of those 19 have ever been seen to move
|
||||||
|
// (`FTPShID`, `FTPDesID`), which is exactly why the count of CONSTANTS rose
|
||||||
|
// faster than the count of varying fields: typing a body honestly adds far
|
||||||
|
// more unexercised fields than exercised ones, and this census is the place
|
||||||
|
// that stays visible.
|
||||||
|
const size_t kVaryingBaseline = 538;
|
||||||
CHECK(varying >= kVaryingBaseline);
|
CHECK(varying >= kVaryingBaseline);
|
||||||
|
|
||||||
std::printf("test_domains: %s (%zu save(s), %d failure(s))\n", fails ? "FAILED" : "ok", saves.size(), fails);
|
std::printf("test_domains: %s (%zu save(s), %d failure(s))\n", fails ? "FAILED" : "ok", saves.size(), fails);
|
||||||
|
|
|
||||||
|
|
@ -142,6 +142,16 @@ static void check_save(const std::string& path, const char* dump_dir) {
|
||||||
// With TurnCommands_v5 typed, the only items left carried as Nodes are the
|
// With TurnCommands_v5 typed, the only items left carried as Nodes are the
|
||||||
// two of the MT19937 block, which is deliberately opaque.
|
// two of the MT19937 block, which is deliberately opaque.
|
||||||
CHECK(pct >= 99.99);
|
CHECK(pct >= 99.99);
|
||||||
|
// The percentage is the WEAKER half of this ratchet and cannot be raised
|
||||||
|
// usefully: it is 2/items, so tightening it would fail on a *small* save
|
||||||
|
// that types perfectly and pass a big one that carries a new opaque body.
|
||||||
|
// The strong form is the item count itself. 2026-09-09, 43 saves: the only
|
||||||
|
// opaque items in any save are the MT19937 block's two (`RNG`), so the
|
||||||
|
// ratchet is that exact set. A newly-carried body breaks this line first,
|
||||||
|
// and it breaks it on the save that has the body, not on the smallest one.
|
||||||
|
// Raise it -- by typing the body -- the way rule 27 says; never widen it.
|
||||||
|
CHECK(cov.opaque == 2);
|
||||||
|
CHECK(cov.opaque_by_tag.size() == 1 && cov.opaque_by_tag.count("RNG") == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- round trips ------------------------------------------------------------------
|
// --- round trips ------------------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue