Gate the PCSX2 claims as tests; two corrections fall out of writing them
The audit two commits ago listed three claims as "not assertable here -- needs a
savestate". With PCSX2 running they are assertable, so they now are. gc-trace
already exposed gc_trace::Savestate::ee_ram_owned(); gc-extract just needed it as
a dev-dependency. Both tests are gated on GC_SSTATE and skip cleanly without it,
so a normal checkout pays nothing.
Writing them corrected two claims, which is the main reason they were worth
writing as tests rather than staying prose.
1. The collision payload is NOT "byte-for-byte identical". The original claim
rested on a 4 KiB probe; the test compares the whole 903,248-byte payload:
payload 903,248 bytes at RAM 0xac6800
first difference +0xdc82c, i.e. 903,212 bytes in
bytes that differ 6 (0.00%)
903,212 of 903,248 bytes are verbatim and 6 are not, all in the final 36.
"Verbatim" was an overclaim on a probe that never looked at the tail. The test
now measures the whole payload and reports the extent, asserting only that the
divergence is beyond the head.
2. The tfrag relocation base is the TABLE address, not the block base. The delta is
8,683,584 = 0x848040 = block base 0x848000 plus table_offset 0x40 -- which is
exactly what TfragHeader::data's own documentation says, "relative to the
table". The earlier claim said "the block's RAM base", off by exactly the table
offset.
Also: +0x10 and +0x38 do NOT share one constant. The aggregate "1,665 fields
relocate by one constant" was true only because +0x10 carried it; lumping them
hid that. The test asserts +0x10 and REPORTS +0x38's delta rather than assuming.
The patch-rewrite figures also restated on aggregate rather than median, which is
why they read lower than the 7.80%/8.12% medians recorded earlier:
patch bytes rewritten -- cannot morph 1.9% of 334, can morph 2.1% of 499
Same conclusion, stated on a total instead of a per-patch median, and asserted to
within 3 percentage points of each other.
Net: the audit table in docs/formats/core-data-regions.md now has no "prose only"
rows for disc-or-savestate-readable claims.
This commit is contained in:
@@ -797,9 +797,19 @@ that address back gives byte-for-byte the disc's own bytes:
|
||||
RAM 0xac6800 0b 00 21 00 b6 08 ad 08 a4 08 6b 08 38 08 63 07
|
||||
disc 0x27e800 0b 00 21 00 b6 08 ad 08 a4 08 6b 08 38 08 63 07
|
||||
|
||||
**Nothing is reshaped.** That is the opposite of the tie block, where the loader
|
||||
relocates a pointer inside each record, and the opposite of what this file
|
||||
previously asserted for collision.
|
||||
**Nothing is reshaped -- except the last 36 bytes.** The test that now asserts
|
||||
this compares the *whole* payload rather than the 4 KiB head the original
|
||||
measurement used, and the finer comparison gives a more precise answer:
|
||||
|
||||
payload 903,248 bytes at RAM 0xac6800
|
||||
first difference +0xdc82c, i.e. 903,212 bytes in
|
||||
bytes that differ 6 (0.00%)
|
||||
|
||||
So **903,212 of 903,248 bytes are verbatim and 6 are not**, all of them in the
|
||||
final 36. An earlier version of this file called the payload "byte-for-byte
|
||||
identical" on the strength of a 4 KiB probe; the tail was never compared. Six
|
||||
bytes in a trailer is not much, but "verbatim" was an overclaim and the test now
|
||||
measures the whole thing and reports the extent rather than asserting it.
|
||||
|
||||
### The correction
|
||||
|
||||
|
||||
Reference in New Issue
Block a user