use itertools::Itertools;
use crate::{
prelude::{Header, Rinex, RinexType},
tests::toolkit::{generic_rinex_test, observables_csv, TimeFrame},
};
#[cfg(feature = "meteo")]
pub fn generic_comparison(dut: &Rinex, model: &Rinex) {
let dut_sensors = dut.meteo_sensors_iter().collect::<Vec<_>>();
let expected_sensors = model.meteo_sensors_iter().collect::<Vec<_>>();
assert_eq!(dut_sensors, expected_sensors);
let dut_content = dut.observables_iter().sorted().collect::<Vec<_>>();
let expected_content = dut.observables_iter().sorted().collect::<Vec<_>>();
assert_eq!(dut_content, expected_content);
let rec_dut = dut
.record
.as_meteo()
.expect("failed to unwrap rinex record");
let rec_model = model
.record
.as_meteo()
.expect("failed to unwrap rinex record");
for (k, v) in rec_model.iter() {
if let Some(dut_v) = rec_dut.get(&k) {
assert_eq!(v, dut_v);
} else {
panic!("missing entry at {}:{}", k.epoch, k.observable);
}
}
for (k, _) in rec_dut.iter() {
assert!(
rec_model.get(k).is_some(),
"found unexpected content: {:?}",
k
);
}
}
fn basic_header_tests(dut: &Header) {
assert!(dut.obs.is_none(),);
assert!(dut.meteo.is_some(),);
assert!(dut.clock.is_none(),);
let _ = dut.meteo.as_ref().expect("missing specific specs");
}
pub fn generic_meteo_rinex_test(dut: &Rinex, version: &str, obs_csv: &str, _time_frame: TimeFrame) {
assert!(dut.is_meteo_rinex());
let mut observables = observables_csv(obs_csv);
observables.sort();
let found = dut.observables_iter().sorted().cloned().collect::<Vec<_>>();
assert_eq!(found, observables);
generic_rinex_test(
dut,
version,
None,
RinexType::MeteoData,
None,
);
basic_header_tests(&dut.header);
}