sidereon-core 0.15.0

The complete Sidereon engine: numerical astrodynamics propagation core plus the GNSS domain layer (SP3, broadcast ephemeris, multi-GNSS positioning, RTK/PPP, ionosphere/troposphere, DOP) behind a default-on gnss feature
Documentation
use sidereon_core::nmea::{self, NmeaBody};

#[test]
fn nmea_integration_groups_mixed_epoch() {
    let log = nmea::parse_nmea_str(
        "$GPRMC,123520,A,4807.038,N,01131.000,E,22.4,84.4,230394,3.1,W,A,S*72\n\
         $GNGSA,A,3,01,02,03,04,,,,,,,,,1.5,0.9,1.2,1*3B\n\
         $GPGSV,1,1,01,01,45,083,42,1*58\n\
         $GPGGA,123521,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*4C\n",
    );
    assert!(log.diagnostics.skips.is_empty(), "{:?}", log.diagnostics);
    assert!(matches!(log.value.sentences[0].body, NmeaBody::Rmc(_)));

    let epochs = nmea::group_epochs(&log.value);
    assert_eq!(epochs.len(), 2);
    assert_eq!(epochs[0].time_of_day.unwrap().second, 20);
    assert_eq!(epochs[0].date.unwrap().year, 1994);
    assert_eq!(epochs[0].gsa.len(), 1);
    assert_eq!(epochs[0].gsv[0].satellites.len(), 1);
    assert_eq!(epochs[1].time_of_day.unwrap().second, 21);
}