Skip to content

Close test-coverage gaps in negative/edge paths (decode_once, CRC/parity failure, health, signal loss) #53

Description

@zsoerenm

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=true is never tested (any signal). The early-stop branch in decode (src/gnss.jl, the !decode_once || !is_decoding_completed_for_positioning(...) gate) and every signal's is_decoding_completed_for_positioning are uncovered. Add a test that decodes with decode_once=true and asserts decoding stops once positioning data is validated.

  • CRC/parity-failure rejection only tested for L1C-D.

    • Galileo E1B: the crc24q(...) == 0 gate that accepts/drops a word is only ever hit on valid data. Add a corrupted-frame test asserting bad words are dropped.
    • GPS L1 C/A: check_gpsl1_parity and the parity_ok subframe gate are never exercised with bad parity. Add an analogue of the L1C-D corrupt=true test.
  • Unhealthy-satellite path only tested for L1C-D. is_sat_healthy is asserted true for Galileo and GPS L1 C/A but never false. The Galileo signal_out_of_service / navigation_data_invalid branch and the GPS L1 C/A svhealth-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) decode argument guard untested. decode throws ArgumentError("num_symbols exceeds length(soft_symbols)"); add a @test_throws.

Notes

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions