Add unit tests

This commit is contained in:
Andras Schmelczer 2026-02-05 21:19:01 +00:00
parent 55598aaaa0
commit 5fe192d25a
9 changed files with 512 additions and 1037 deletions

View file

@ -222,4 +222,108 @@ mod tests {
let grid = GridIndex::build(&[], &[], 0.1);
assert!(grid.query(-90.0, -180.0, 90.0, 180.0).is_empty());
}
#[test]
fn single_point_inside_query() {
let lat = vec![51.5_f32];
let lon = vec![-0.1_f32];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(51.4, -0.2, 51.6, 0.0);
assert_eq!(result.len(), 1);
assert_eq!(result[0], 0);
}
#[test]
fn single_point_outside_query() {
let lat = vec![51.5_f32];
let lon = vec![-0.1_f32];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(52.0, 0.0, 53.0, 1.0);
assert!(result.is_empty());
}
#[test]
fn multiple_points_partial_query() {
let lat = vec![51.5_f32, 51.6, 51.7, 52.0];
let lon = vec![-0.1_f32, -0.1, -0.1, -0.1];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(51.4, -0.2, 51.8, 0.0);
assert_eq!(result.len(), 3);
assert!(result.contains(&0));
assert!(result.contains(&1));
assert!(result.contains(&2));
assert!(!result.contains(&3));
}
#[test]
fn query_at_grid_boundary() {
let lat = vec![51.0_f32, 51.01, 51.02];
let lon = vec![0.0_f32, 0.01, 0.02];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(50.99, -0.01, 51.005, 0.005);
assert!(result.contains(&0));
}
#[test]
fn for_each_matches_query() {
let lat = vec![51.5_f32, 51.6, 51.7];
let lon = vec![-0.1_f32, -0.2, -0.3];
let grid = GridIndex::build(&lat, &lon, 0.01);
let query_result = grid.query(51.4, -0.25, 51.65, 0.0);
let mut foreach_result = Vec::new();
grid.for_each_in_bounds(51.4, -0.25, 51.65, 0.0, |idx| {
foreach_result.push(idx);
});
assert_eq!(query_result.len(), foreach_result.len());
for idx in &query_result {
assert!(foreach_result.contains(idx));
}
}
#[test]
fn negative_coordinates() {
let lat = vec![-33.9_f32, -33.8, -33.7];
let lon = vec![151.2_f32, 151.3, 151.4];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(-34.0, 151.1, -33.65, 151.5);
assert_eq!(result.len(), 3);
}
#[test]
fn query_bounds_completely_outside_grid() {
let lat = vec![51.5_f32];
let lon = vec![-0.1_f32];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(0.0, 100.0, 10.0, 110.0);
assert!(result.is_empty());
}
#[test]
fn very_small_cell_size() {
let lat = vec![51.5_f32, 51.5001, 51.5002];
let lon = vec![-0.1_f32, -0.1001, -0.1002];
let grid = GridIndex::build(&lat, &lon, 0.0001);
let result = grid.query(51.4999, -0.1003, 51.5003, -0.0999);
assert_eq!(result.len(), 3);
}
#[test]
fn very_large_coordinates() {
let lat = vec![89.9_f32, -89.9];
let lon = vec![179.9_f32, -179.9];
let grid = GridIndex::build(&lat, &lon, 0.01);
let result = grid.query(-90.0, -180.0, 90.0, 180.0);
assert_eq!(result.len(), 2);
}
}