rinex 0.22.0

RINEX file parsing, analysis and production
Documentation
#[cfg(test)]
mod test {
    use crate::prelude::*;
    use crate::preprocessing::*;
    use std::str::FromStr;
    fn testbench(filter_name: &str, expected: Vec<(&str, &str, Vec<f64>)>, rinex: &Rinex) {
        for (sv, code, dataset) in expected {
            let sv_to_test = SV::from_str(sv).unwrap();
            let code_to_test = code.to_string();
            let record = rinex.record.as_obs().unwrap();
            for (index, ((epoch, _), (_, svs))) in record.iter().enumerate() {
                for (sv, observables) in svs {
                    if *sv == sv_to_test {
                        for (observable, observation) in observables {
                            if observable.to_string() == code_to_test {
                                let expected = dataset.get(index).unwrap();
                                assert!((observation.obs - *expected).abs() < 1E-5,
									"{} filter test failed for \"{}\":\"{}\" @ {} - expecting {} got {}", filter_name, sv, observable, epoch, *expected, observation.obs);
                            }
                        }
                    }
                }
            }
        }
    }
    #[test]
    fn v3_duth0630_hatch_filter() {
        let initial_rinex = Rinex::from_file("data/OBS/V3/DUTH0630.22O").unwrap();
        let filter = Filter::from_str("smooth:hatch:c1c,c2p,l1c,l2p").unwrap();
        let filtered = initial_rinex.filter(filter);

        let expected: Vec<(&str, &str, Vec<f64>)> = vec![(
            "G01",
            "C1C",
            vec![
                20243517.560,
                1.0 / 2.0 * 20805393.080
                    + (20243517.560 + (109333085.615 - 106380411.418)) * (2.0 - 1.0) / 2.0,
                1.0 / 3.0 * 21653418.260
                    + ((1.0 / 2.0 * 20805393.080
                        + (20243517.560 + (109333085.615 - 106380411.418)) * (2.0 - 1.0) / 2.0)
                        + (113789485.670 - 109333085.615))
                        * (3.0 - 1.0)
                        / 3.0,
            ],
        )];
        testbench("hatch", expected, &filtered);

        let expected: Vec<(&str, &str, Vec<f64>)> = vec![(
            "R10",
            "C2P",
            vec![
                23044984.180,
                1.0 / 2.0 * 22432243.520
                    + (23044984.180 + (122842738.811 - 106380411.418)) * (2.0 - 1.0) / 2.0,
                1.0 / 3.0 * 22235350.560
                    + ((1.0 / 2.0 * 22432243.520
                        + (23044984.180 + (122842738.811 - 106380411.418)) * (2.0 - 1.0) / 2.0)
                        + (118526944.203 - 119576492.916))
                        * (3.0 - 1.0)
                        / 3.0,
            ],
        )];
        testbench("hatch", expected, &filtered);
    }
}