use proptest::prelude::*;
use plozone::coord::EnuConverter;
proptest! {
#[test]
fn enu_round_trip_within_tolerance(
lat in -60.0f64..60.0,
lon in -179.0f64..179.0,
alt in -100.0f64..10000.0,
) {
let conv = EnuConverter::new(lat, lon, alt);
let enu = conv.to_enu(lat + 0.001, lon + 0.001, alt + 1.0);
let geo = conv.from_enu(enu[0], enu[1], enu[2]);
prop_assert!(
(geo[0] - (lat + 0.001)).abs() < 1e-6,
"lat mismatch: {} vs {}",
geo[0],
lat + 0.001
);
prop_assert!(
(geo[1] - (lon + 0.001)).abs() < 1e-6,
"lon mismatch: {} vs {}",
geo[1],
lon + 0.001
);
prop_assert!(
(geo[2] - (alt + 1.0)).abs() < 0.01,
"alt mismatch: {} vs {}",
geo[2],
alt + 1.0
);
}
#[test]
fn origin_maps_to_zero(
lat in -60.0f64..60.0,
lon in -179.0f64..179.0,
alt in -100.0f64..10000.0,
) {
let conv = EnuConverter::new(lat, lon, alt);
let enu = conv.to_enu(lat, lon, alt);
prop_assert!((enu[0].abs() + enu[1].abs() + enu[2].abs()) < 1e-6,
"origin must map to ENU zero, got {:?}", enu);
}
}