diff --git a/01.workspace/oxydice_lib/src/imp/dice_grab.rs b/01.workspace/oxydice_lib/src/imp/dice_grab.rs index 67ec895..205c1d3 100644 --- a/01.workspace/oxydice_lib/src/imp/dice_grab.rs +++ b/01.workspace/oxydice_lib/src/imp/dice_grab.rs @@ -6,7 +6,10 @@ impl Dice { for _ in 1..=dice { handful.push(Die::new(sides)); } - Self { handful } + Self { + handful, + roll_results: Vec::::new(), + } } pub fn and_grab(mut self, dice: u16, sides: u16) -> Self { for _ in 1..=dice { diff --git a/01.workspace/oxydice_lib/src/imp/dice_roll.rs b/01.workspace/oxydice_lib/src/imp/dice_roll.rs new file mode 100644 index 0000000..4ffc0bc --- /dev/null +++ b/01.workspace/oxydice_lib/src/imp/dice_roll.rs @@ -0,0 +1,10 @@ +use crate::*; + +impl Dice { + pub fn roll(&mut self) { + self.roll_results.clear(); + for die in &self.handful { + self.roll_results.push(die.roll()) + } + } +} diff --git a/01.workspace/oxydice_lib/src/imp/die_roll.rs b/01.workspace/oxydice_lib/src/imp/die_roll.rs new file mode 100644 index 0000000..5bd9ce6 --- /dev/null +++ b/01.workspace/oxydice_lib/src/imp/die_roll.rs @@ -0,0 +1,11 @@ +use crate::*; + +impl Die { + pub fn roll(&self) -> u16 { + let mut rng = rand::rng(); + rng.random_range(0..self.sides) + } +} + +// #[cfg(test)] +// mod unit_tests { use super::*; } diff --git a/01.workspace/oxydice_lib/src/imp/mod.rs b/01.workspace/oxydice_lib/src/imp/mod.rs index f8d11ea..b2f5611 100644 --- a/01.workspace/oxydice_lib/src/imp/mod.rs +++ b/01.workspace/oxydice_lib/src/imp/mod.rs @@ -1 +1,3 @@ pub mod dice_grab; +pub mod dice_roll; +pub mod die_roll; diff --git a/01.workspace/oxydice_lib/src/lib.rs b/01.workspace/oxydice_lib/src/lib.rs index f3344ff..488c6b9 100644 --- a/01.workspace/oxydice_lib/src/lib.rs +++ b/01.workspace/oxydice_lib/src/lib.rs @@ -1,5 +1,7 @@ use std::*; +use rand::*; + mod fun; mod imp; mod mcr; diff --git a/01.workspace/oxydice_lib/src/str/dice.rs b/01.workspace/oxydice_lib/src/str/dice.rs index 6e30395..4de4d34 100644 --- a/01.workspace/oxydice_lib/src/str/dice.rs +++ b/01.workspace/oxydice_lib/src/str/dice.rs @@ -3,6 +3,7 @@ use crate::*; #[derive(Debug, Default, PartialEq, Clone)] pub struct O { pub(crate) handful: Vec, + pub(crate) roll_results: Vec, } // impl std::fmt::Display for O { diff --git a/01.workspace/oxydice_lib/src/tst/dice_roll.rs b/01.workspace/oxydice_lib/src/tst/dice_roll.rs new file mode 100644 index 0000000..f6c587d --- /dev/null +++ b/01.workspace/oxydice_lib/src/tst/dice_roll.rs @@ -0,0 +1,17 @@ +#[cfg(test)] +mod tests { + use crate::*; + #[test] + pub fn roll_should_yield_correct_number_or_results() { + let mut dice = Dice::grab(3, 6); + dice.roll(); + assert_eq!(dice.roll_results.len(), 3); + } + #[test] + fn reroll_should_yield_correct_number_of_results() { + let mut dice = Dice::grab(3, 6); + dice.roll(); + dice.roll(); + assert_eq!(dice.roll_results.len(), 3); + } +} diff --git a/01.workspace/oxydice_lib/src/tst/die_roll.rs b/01.workspace/oxydice_lib/src/tst/die_roll.rs new file mode 100644 index 0000000..e6ebe86 --- /dev/null +++ b/01.workspace/oxydice_lib/src/tst/die_roll.rs @@ -0,0 +1,11 @@ +#[cfg(test)] +mod tests { + use crate::*; + #[test] + pub fn die_roll_should_always_stay_inside_range() { + let die = Die::new(6); + for _ in 1..=10000 { + assert!(die.roll() < 6); + } + } +} diff --git a/01.workspace/oxydice_lib/src/tst/mod.rs b/01.workspace/oxydice_lib/src/tst/mod.rs index f8d11ea..c4701d4 100644 --- a/01.workspace/oxydice_lib/src/tst/mod.rs +++ b/01.workspace/oxydice_lib/src/tst/mod.rs @@ -1 +1,3 @@ pub mod dice_grab; +pub mod die_roll; +pub mod dice_roll;