plozone 0.1.2

3D spatial zone engine: geofencing, octree hole-scanning, realtime sync (WebSocket + QUIC + io_uring), voxel pathfinding, and AV sensor fusion.
Documentation
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);
    }
}