summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora14m <[email protected]>2021-04-05 00:40:24 +0200
committera14m <[email protected]>2021-04-05 00:40:24 +0200
commit882d9f66aa633a9e1c2a0a301be1a655790459de (patch)
treeefa518db95d8a740ddbbb5312259ab2d3a3130ab
parenta46a77b00f353be70f429111e62057c89b2c53a8 (diff)
Refactor return result instead of universe object
-rw-r--r--CLI/rust/src/game_of_life.rs19
-rw-r--r--CLI/rust/src/game_of_life/generators/input.rs17
-rw-r--r--CLI/rust/src/game_of_life/generators/seed.rs3
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!()
}