Add unit tests
This commit is contained in:
parent
55598aaaa0
commit
5fe192d25a
9 changed files with 512 additions and 1037 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue