h3o 0.10.0

A Rust implementation of the H3 geospatial indexing system.
Documentation
use super::*;
use crate::LatLng;
use float_eq::assert_float_eq;

#[test]
fn magnitude() {
    let v = Vec2d::new(3.0, 4.0);
    let expected = 5.0;

    let result = v.magnitude();

    assert_float_eq!(result, expected, abs <= f64::EPSILON);
}

#[test]
fn intersection() {
    let line1 = (Vec2d::new(2.0, 2.0), Vec2d::new(6.0, 6.0));
    let line2 = (Vec2d::new(0.0, 4.0), Vec2d::new(10.0, 4.0));
    let expected = Vec2d::new(4.0, 4.0);

    let result = Vec2d::intersection(line1, line2);

    assert_float_eq!(
        result.x,
        expected.x,
        abs <= f64::EPSILON,
        "x as expected"
    );
    assert_float_eq!(
        result.y,
        expected.y,
        abs <= f64::EPSILON,
        "y as expected"
    );
}

#[test]
fn from_vec3d() {
    let ll = LatLng::new(48.85458622023985, 2.373012457671282).expect("ll");
    let nvec = Vec3d::from(ll);
    let (face, distance) = nvec.closest_face();
    let resolutions = Resolution::range(Resolution::Zero, Resolution::Fifteen);
    let cases = [
        Vec2d::new(1.1492609554036695, -0.46294792417975866),
        Vec2d::new(2.4722277255402307, -2.152658993406549),
        Vec2d::new(8.044826687825688, -3.240635469258311),
        Vec2d::new(17.305594078781617, -15.068612953845845),
        Vec2d::new(56.31378681477982, -22.684448284808177),
        Vec2d::new(121.13915855147133, -105.48029067692093),
        Vec2d::new(394.1965077034588, -158.79113799365726),
        Vec2d::new(847.9741098602993, -738.3620347384465),
        Vec2d::new(2759.3755539242115, -1111.5379659556008),
        Vec2d::new(5935.818769022096, -5168.534243169126),
        Vec2d::new(19315.62887746948, -7780.7657616892075),
        Vec2d::new(41550.73138315468, -36179.73970218389),
        Vec2d::new(135209.4021422864, -54465.36033182446),
        Vec2d::new(290855.11968208273, -253258.1779152872),
        Vec2d::new(946465.8149960049, -381257.52232277126),
        Vec2d::new(2035985.8377745796, -1772807.245407011),
    ];

    for (resolution, &expected) in resolutions.zip(cases.iter()) {
        let result = Vec2d::from_vec3d(nvec, resolution, face, distance);

        assert_float_eq!(
            result.x,
            expected.x,
            abs <= 5e-10,
            "x, resolution {resolution}"
        );
        assert_float_eq!(
            result.y,
            expected.y,
            abs <= 5e-10,
            "y, resolution {resolution}"
        );
    }
}