sp3 1.0.8

IGS SP3 file parser
Documentation
//! SP3 merging opreations

#[cfg(test)]
mod test {
    use crate::prelude::*;
    use crate::Merge;
    use std::path::PathBuf;
    use std::str::FromStr;
    #[cfg(feature = "flate2")]
    #[test]
    fn merge_failure() {
        let test_pool = PathBuf::new()
            .join(env!("CARGO_MANIFEST_DIR"))
            .join("..")
            .join("test_resources")
            .join("SP3");

        let path_a = test_pool
            .clone()
            .join("EMR0OPSULT_20232391800_02D_15M_ORB.SP3.gz");
        let file_a = SP3::from_file(&path_a.to_string_lossy());
        assert!(
            file_a.is_ok(),
            "failed to parse EMR0OPSULT_20232391800_02D_15M_ORB.SP3.gz"
        );
        let file_a = file_a.unwrap();

        let path_b = test_pool
            .clone()
            .join("ESA0OPSULT_20232320600_02D_15M_ORB.SP3.gz");
        let file_b = SP3::from_file(&path_b.to_string_lossy());
        assert!(
            file_b.is_ok(),
            "failed to parse ESA0OPSULT_20232320600_02D_15M_ORB.SP3.gz"
        );
        let file_b = file_b.unwrap();

        let new = file_a.merge(&file_b);
        assert!(
            new.is_err(),
            "should not be able to merge files from two different data providers"
        );
    }
    #[cfg(feature = "flate2")]
    #[test]
    fn esa0opsrap_esa0opsult_2023() {
        let test_pool = PathBuf::new()
            .join(env!("CARGO_MANIFEST_DIR"))
            .join("..")
            .join("test_resources")
            .join("SP3");

        let path_a = test_pool
            .clone()
            .join("ESA0OPSRAP_20232390000_01D_15M_ORB.SP3.gz");
        let file_a = SP3::from_file(&path_a.to_string_lossy());
        assert!(
            file_a.is_ok(),
            "failed to parse ESA0OPSRAP_20232390000_01D_15M_ORB.SP3.gz"
        );
        let file_a = file_a.unwrap();

        let path_b = test_pool
            .clone()
            .join("ESA0OPSULT_20232320600_02D_15M_ORB.SP3.gz");
        let file_b = SP3::from_file(&path_b.to_string_lossy());
        assert!(
            file_b.is_ok(),
            "failed to parse ESA0OPSULT_20232320600_02D_15M_ORB.SP3.gz"
        );
        let file_b = file_b.unwrap();

        let merged = file_a.merge(&file_b);
        assert!(
            merged.is_ok(),
            "failed to merge into ESA0OPSULT_20232320600 ESA0OPSRAP_20232390000, {:?}",
            merged.err()
        );

        let merged = merged.unwrap();
        assert_eq!(merged.nb_epochs(), 192 + 96);
        assert_eq!(
            merged.first_epoch(),
            Some(Epoch::from_str("2023-08-20T06:00:00 GPST").unwrap())
        );
        assert_eq!(
            merged.last_epoch(),
            Some(Epoch::from_str("2023-08-27T23:45:00 GPST").unwrap())
        );
    }
}