The v2.0.0 work (#51) has strong positive-path coverage with byte-for-byte golden fixtures (incl. the Spirent L1C-D recording). The systematic gap is in negative and edge paths — several are exercised for GPS L1C-D but not for the other signals, and one keyword is untested everywhere. None of these is a known bug; they're untested code paths that could regress silently.
Gaps
Notes
The v2.0.0 work (#51) has strong positive-path coverage with byte-for-byte golden fixtures (incl. the Spirent L1C-D recording). The systematic gap is in negative and edge paths — several are exercised for GPS L1C-D but not for the other signals, and one keyword is untested everywhere. None of these is a known bug; they're untested code paths that could regress silently.
Gaps
decode_once=trueis never tested (any signal). The early-stop branch indecode(src/gnss.jl, the!decode_once || !is_decoding_completed_for_positioning(...)gate) and every signal'sis_decoding_completed_for_positioningare uncovered. Add a test that decodes withdecode_once=trueand asserts decoding stops once positioning data is validated.CRC/parity-failure rejection only tested for L1C-D.
crc24q(...) == 0gate that accepts/drops a word is only ever hit on valid data. Add a corrupted-frame test asserting bad words are dropped.check_gpsl1_parityand theparity_oksubframe gate are never exercised with bad parity. Add an analogue of the L1C-Dcorrupt=truetest.Unhealthy-satellite path only tested for L1C-D.
is_sat_healthyis assertedtruefor Galileo and GPS L1 C/A but neverfalse. The Galileosignal_out_of_service/navigation_data_invalidbranch and the GPS L1 C/Asvhealth-driven unhealthy branch (incl. the@warn "Bad LNAV Data, SV-Health critical") are unreached. Add unhealthy fixtures for both.Mid-stream signal-loss / reacquisition recovery only tested for L1C-D. L1C-D has an excellent reset+recovery regression test; Galileo E1B and GPS L1 C/A have no equivalent for behaviour across a sync discontinuity / outage.
(minor)
decodeargument guard untested.decodethrowsArgumentError("num_symbols exceeds length(soft_symbols)"); add a@test_throws.Notes
confirm_datavoting tests already assert on the returned state's cache, so they're a good template for state-threading assertions.