From e23157ccf9f9ca4f03825c6fe60405c4404ee82d Mon Sep 17 00:00:00 2001 From: mhsn Date: Mon, 2 Jun 2025 16:08:46 +0000 Subject: rust lib: add points iter --- lib/rust/src/lib.rs | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/lib/rust/src/lib.rs b/lib/rust/src/lib.rs index 25c82db..bfeaee4 100644 --- a/lib/rust/src/lib.rs +++ b/lib/rust/src/lib.rs @@ -8,6 +8,11 @@ impl Grid { Grid { grid } } + pub fn points(&self) -> impl Iterator { + (0..self.grid.len()) + .flat_map(|y| (0..self.grid.first().unwrap_or(&Vec::new()).len()).map(move |x| (x, y))) + } + pub fn ray(&self, (x, y): (usize, usize), (dx, dy): (i64, i64)) -> impl Iterator { let (x, y) = (i64::try_from(x).unwrap(), i64::try_from(y).unwrap()); (0..) @@ -23,6 +28,8 @@ impl Grid { #[cfg(test)] mod tests { + use std::collections::HashSet; + use super::*; #[test] @@ -30,6 +37,35 @@ mod tests { let _grid = Grid::new(vec![vec![1, 2, 3], vec![4, 5, 6], vec![7, 8, 9]]); } + #[test] + fn points_empty() { + let grid = Grid::::new(vec![vec![]]); + assert!(grid.points().eq(vec![])) + } + + #[test] + fn points_equal_size() { + let grid = Grid::new(vec![vec![1, 2], vec![3, 4]]); + let points = grid.points().collect::>(); + assert_eq!( + points, + [(0, 0), (0, 1), (1, 0), (1, 1)].iter().cloned().collect() + ) + } + + #[test] + fn points_unequal_size() { + let grid = Grid::new(vec![vec![1, 2], vec![3, 4], vec![5, 6]]); + let points = grid.points().collect::>(); + assert_eq!( + points, + [(0, 0), (1, 0), (0, 1), (1, 1), (0, 2), (1, 2)] + .iter() + .cloned() + .collect() + ) + } + #[test] fn ray_empty() { let grid = Grid::::new(vec![vec![]]); -- cgit v1.2.3