From aedde6637c30c9c2dc22b1978bd5a692d5ff5def Mon Sep 17 00:00:00 2001 From: a14m Date: Mon, 5 Apr 2021 23:02:43 +0200 Subject: Add populate function w/testing --- CLI/rust/src/game_of_life/generators/input.rs | 80 +++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) (limited to 'CLI') diff --git a/CLI/rust/src/game_of_life/generators/input.rs b/CLI/rust/src/game_of_life/generators/input.rs index e22a9fc..235b3b2 100644 --- a/CLI/rust/src/game_of_life/generators/input.rs +++ b/CLI/rust/src/game_of_life/generators/input.rs @@ -133,3 +133,83 @@ mod generate_file_data { fn generate_url_data(_opts: Opts) -> Result { unimplemented!() } + +/// Return a universe struct with populated data from the data param +/// +/// The data param is reshaped to fit with the opts width/height (extended or shrinked) +fn populate(opts: Opts, data: Vec>) -> Universe { + let (width, height) = (opts.width as usize, opts.height as usize); + let mut current = vec![vec![false; width]; height]; + + for i in 0..height { + for j in 0..width { + current[i][j] = data + .get(i) + .unwrap_or(&vec![]) + .get(j) + .unwrap_or(&false) + .clone(); + } + } + + Universe { + opts, + current, + future: vec![vec![false; width]; height], + } +} + +#[cfg(test)] +mod populate { + use super::*; + + fn opts(width: isize, height: isize) -> Opts { + Opts { + width, + height, + seed: 1337, + input: None, + live_cell: 'L', + dead_cell: 'D', + delay: 13, + } + } + + #[test] + fn expand_data() { + let data = vec![vec![true, false, true]; 3]; + let opts = opts(5, 5); + + let universe = populate(opts.clone(), data); + assert_eq!( + universe, + Universe { + opts, + future: vec![vec![false; 5]; 5], + current: vec![ + vec![true, false, true, false, false], + vec![true, false, true, false, false], + vec![true, false, true, false, false], + vec![false, false, false, false, false], + vec![false, false, false, false, false], + ] + } + ) + } + + #[test] + fn shrink_data() { + let data = vec![vec![true, false, true]; 3]; + let opts = opts(2, 2); + + let universe = populate(opts.clone(), data); + assert_eq!( + universe, + Universe { + opts, + future: vec![vec![false; 2]; 2], + current: vec![vec![true, false], vec![true, false]] + } + ) + } +} -- cgit v1.2.3