From ac91b5d9b5a037ad66855c72fe5cb5b1585a3531 Mon Sep 17 00:00:00 2001 From: Armin Becher Date: Mon, 6 Apr 2020 23:09:07 +0200 Subject: [PATCH] Add pop row --- src/lib.rs | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/lib.rs b/src/lib.rs index 0c44c9c..5d4a509 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -496,6 +496,26 @@ impl Grid { self.cols += 1; self.rows = input_col_len; } + + /// Removes the last row from a grid and returns it, or None if it is empty. + /// + /// # Examples + /// ``` + /// use grid::*; + /// let mut grid = grid![[1,2,3][4,5,6]]; + /// assert_eq![grid.pop_row(), Some(vec![4,5,6])]; + /// assert_eq![grid.pop_row(), Some(vec![1,2,3])]; + /// assert_eq![grid.pop_row(), None]; + /// ``` + pub fn pop_row(&mut self) -> Option> { + if self.rows > 0 { + let row = self.data.split_off((self.rows - 1) * self.cols); + self.rows -= 1; + return Some(row); + } else { + return None; + } + } } impl Clone for Grid { @@ -554,6 +574,21 @@ impl Eq for Grid {} #[cfg(test)] mod test { use super::*; + #[test] + fn pop() { + let mut grid: Grid = Grid::from_vec(vec![1, 2, 3, 4], 2); + assert_eq!(grid.pop_row(), Some(vec![3, 4])); + assert_ne!(grid.size(), (1, 4)); + assert_eq!(grid.pop_row(), Some(vec![1, 2])); + assert_ne!(grid.size(), (0, 0)); + assert_eq!(grid.pop_row(), None); + } + + #[test] + fn pop_row_empty() { + let mut grid: Grid = Grid::from_vec(vec![], 0); + assert_eq!(grid.pop_row(), None); + } #[test] fn ne_full_empty() {