jismeshcode 0.2.1

日本標準地域メッシュコード(JIS X 0410)を扱う包括的なRustライブラリ / A comprehensive Rust library for Japanese Standard Grid Square Code
Documentation
use jismeshcode::prelude::*;

#[test]
fn test_roundtrip_conversion() {
    let coord = Coordinate::new(35.6812, 139.7671).unwrap();
    let mesh = coord_to_mesh(coord, MeshLevel::Third).unwrap();
    let bounds = mesh_to_bounds(mesh);

    assert!(bounds.contains(coord));
}

#[test]
fn test_parent_child_consistency() {
    let mesh = MeshCode::from_str("53394611").unwrap();

    let parent_mesh = parent(mesh).unwrap();
    assert_eq!(parent_mesh.as_string(), "533946");

    let children_list = children(parent_mesh);
    assert!(children_list.contains(&mesh));
}

#[test]
fn test_level_conversion() {
    let mesh = MeshCode::from_str("53394611").unwrap();

    let second = to_level(mesh, MeshLevel::Second).unwrap();
    assert_eq!(second.as_string(), "533946");

    let first = to_level(mesh, MeshLevel::First).unwrap();
    assert_eq!(first.as_string(), "5339");

    assert!(to_level(first, MeshLevel::Third).is_err());
}

#[test]
fn test_neighbor_consistency() {
    let mesh = MeshCode::from_str("53394611").unwrap();
    let east = neighbor(mesh, Direction::East);
    assert!(east.is_some());

    if let Some(east_mesh) = east {
        let west_of_east = neighbor(east_mesh, Direction::West);
        assert_eq!(west_of_east, Some(mesh));
    }
}

#[test]
fn test_bbox_iteration() {
    let sw = Coordinate::new(35.6, 139.7).unwrap();
    let ne = Coordinate::new(35.7, 139.8).unwrap();
    let bbox = BoundingBox::new(sw, ne);

    let meshes: Vec<_> = mesh_codes_in_bbox(bbox, MeshLevel::Third).collect();

    assert!(meshes.len() > 0);
    for mesh in meshes {
        let center = mesh_to_center(mesh);
        assert!(
            center.lat() >= sw.lat() - 0.1 && center.lat() <= ne.lat() + 0.1,
            "Mesh center latitude out of range"
        );
        assert!(
            center.lon() >= sw.lon() - 0.1 && center.lon() <= ne.lon() + 0.1,
            "Mesh center longitude out of range"
        );
    }
}