diff options
| author | a14m <[email protected]> | 2021-04-05 00:40:24 +0200 |
|---|---|---|
| committer | a14m <[email protected]> | 2021-04-05 00:40:24 +0200 |
| commit | 882d9f66aa633a9e1c2a0a301be1a655790459de (patch) | |
| tree | efa518db95d8a740ddbbb5312259ab2d3a3130ab | |
| parent | a46a77b00f353be70f429111e62057c89b2c53a8 (diff) | |
Refactor return result instead of universe object
| -rw-r--r-- | CLI/rust/src/game_of_life.rs | 19 | ||||
| -rw-r--r-- | CLI/rust/src/game_of_life/generators/input.rs | 17 | ||||
| -rw-r--r-- | CLI/rust/src/game_of_life/generators/seed.rs | 3 |
3 files changed, 23 insertions, 16 deletions
diff --git a/CLI/rust/src/game_of_life.rs b/CLI/rust/src/game_of_life.rs index 9ad857d..fd147c5 100644 --- a/CLI/rust/src/game_of_life.rs +++ b/CLI/rust/src/game_of_life.rs @@ -1,6 +1,6 @@ //! Game of Life module for generating the CLI app, validating the options //! and starting the simulation -use clap::{crate_authors, crate_version, App, Arg}; +use clap::{crate_authors, crate_version, App, Arg, Error}; /// Options module for validations and Opts struct pub(crate) mod opts; @@ -11,6 +11,7 @@ pub(crate) mod generators; /// Universe module for running the simulation pub(crate) mod universe; +use universe::Universe; /// Define the Clap CLI App for running Game of Life simulation /// @@ -162,7 +163,7 @@ mod app { /// /// If an input is provided, the input will be used (taking precedence over seed) /// Else use the seed option (defaults to random when not provided). -pub(crate) fn generate(opts: opts::Opts) -> universe::Universe { +pub(crate) fn generate(opts: opts::Opts) -> Result<Universe, Error> { match opts.input { Some(_) => generators::input::new(opts), None => generators::seed::new(opts), @@ -174,8 +175,8 @@ mod generate { use super::*; use mocktopus::mocking::*; - fn universe_mock(opts: opts::Opts) -> universe::Universe { - universe::Universe { + fn universe_mock(opts: opts::Opts) -> Universe { + Universe { opts, current: vec![vec![]], future: vec![vec![]], @@ -194,9 +195,10 @@ mod generate { delay: 13, }; - generators::seed::new.mock_safe(|opts| MockResult::Return(universe_mock(opts))); + generators::seed::new.mock_safe(|opts| MockResult::Return(Ok(universe_mock(opts)))); generators::input::new.mock_safe(|_| panic!()); - assert_eq!(generate(opts.clone()), universe_mock(opts.clone())); + let universe = generate(opts.clone()).unwrap(); + assert_eq!(universe, universe_mock(opts)); } #[test] @@ -212,7 +214,8 @@ mod generate { }; generators::seed::new.mock_safe(|_| panic!()); - generators::input::new.mock_safe(|opts| MockResult::Return(universe_mock(opts))); - assert_eq!(generate(opts.clone()), universe_mock(opts.clone())); + generators::input::new.mock_safe(|opts| MockResult::Return(Ok(universe_mock(opts)))); + let universe = generate(opts.clone()).unwrap(); + assert_eq!(universe, universe_mock(opts)); } } diff --git a/CLI/rust/src/game_of_life/generators/input.rs b/CLI/rust/src/game_of_life/generators/input.rs index c2b2bb0..ee41de5 100644 --- a/CLI/rust/src/game_of_life/generators/input.rs +++ b/CLI/rust/src/game_of_life/generators/input.rs @@ -1,5 +1,6 @@ use crate::game_of_life::opts::Opts; use crate::game_of_life::universe::Universe; +use clap::Error; use regex::Regex; #[cfg(test)] @@ -12,7 +13,7 @@ use mocktopus::macros::mockable; /// otherwise, it'll be assumed that it's a path to a local file that will be parsed, and /// used as the seeding input #[cfg_attr(test, mockable)] -pub(crate) fn new(opts: Opts) -> Universe { +pub(crate) fn new(opts: Opts) -> Result<Universe, Error> { let input = opts.input.clone().unwrap(); match Regex::new("^(ht|f)?tp(s)?://*").unwrap().is_match(&input) { true => generate_url_data(opts), @@ -46,8 +47,9 @@ mod new { }; generate_file_data.mock_safe(|_| panic!()); - generate_url_data.mock_safe(|opts| MockResult::Return(universe_mock(opts))); - assert_eq!(new(opts.clone()), universe_mock(opts.clone())); + generate_url_data.mock_safe(|opts| MockResult::Return(Ok(universe_mock(opts)))); + let universe = new(opts.clone()).unwrap(); + assert_eq!(universe, universe_mock(opts)); } #[test] @@ -62,22 +64,23 @@ mod new { delay: 13, }; - generate_file_data.mock_safe(|opts| MockResult::Return(universe_mock(opts))); + generate_file_data.mock_safe(|opts| MockResult::Return(Ok(universe_mock(opts)))); generate_url_data.mock_safe(|_| panic!()); - assert_eq!(new(opts.clone()), universe_mock(opts.clone())); + let universe = new(opts.clone()).unwrap(); + assert_eq!(universe, universe_mock(opts)); } } /// Reads a local file and parses it, converting alpha-numerical chars into living cells /// in a newly generated universe simulation #[cfg_attr(test, mockable)] -fn generate_file_data(_opts: Opts) -> Universe { +fn generate_file_data(_opts: Opts) -> Result<Universe, Error> { unimplemented!() } /// Reads a URL and parses it, converting alpha-numerical chars into living cells /// in a newly generated universe simulation #[cfg_attr(test, mockable)] -fn generate_url_data(_opts: Opts) -> Universe { +fn generate_url_data(_opts: Opts) -> Result<Universe, Error> { unimplemented!() } diff --git a/CLI/rust/src/game_of_life/generators/seed.rs b/CLI/rust/src/game_of_life/generators/seed.rs index f6344ac..d280eff 100644 --- a/CLI/rust/src/game_of_life/generators/seed.rs +++ b/CLI/rust/src/game_of_life/generators/seed.rs @@ -1,5 +1,6 @@ use crate::game_of_life::opts::Opts; use crate::game_of_life::universe::Universe; +use clap::Error; #[cfg(test)] use mocktopus::macros::mockable; @@ -9,6 +10,6 @@ use mocktopus::macros::mockable; /// The generation of the seed should be stable across different machines /// using the same language package, version, width and height. #[cfg_attr(test, mockable)] -pub(crate) fn new(_opts: Opts) -> Universe { +pub(crate) fn new(_opts: Opts) -> Result<Universe, Error> { unimplemented!() } |
