From 589c25cdcdf071b3a0b053d322c45f77ba41fc07 Mon Sep 17 00:00:00 2001 From: Kate Korsaro Date: Sat, 15 Nov 2025 12:01:24 +0100 Subject: [PATCH] feat: add Die and Dice structs with grab and and_grab methods --- 01.workspace/oxydice_lib/src/fun/mod.rs | 1 + 01.workspace/oxydice_lib/src/imp/dice_grab.rs | 17 ++++++++++++++ 01.workspace/oxydice_lib/src/imp/die_new.rs | 7 ++++++ 01.workspace/oxydice_lib/src/imp/mod.rs | 2 ++ 01.workspace/oxydice_lib/src/lib.rs | 3 +++ 01.workspace/oxydice_lib/src/mcr/mod.rs | 1 + 01.workspace/oxydice_lib/src/str/dice.rs | 6 +++++ 01.workspace/oxydice_lib/src/str/die.rs | 6 +++++ 01.workspace/oxydice_lib/src/str/mod.rs | 2 ++ 01.workspace/oxydice_lib/src/trt/mod.rs | 1 + 01.workspace/oxydice_lib/src/tst/dice_grab.rs | 23 +++++++++++++++++++ 01.workspace/oxydice_lib/src/tst/mod.rs | 2 ++ 12 files changed, 71 insertions(+) create mode 100644 01.workspace/oxydice_lib/src/imp/dice_grab.rs create mode 100644 01.workspace/oxydice_lib/src/imp/die_new.rs create mode 100644 01.workspace/oxydice_lib/src/str/dice.rs create mode 100644 01.workspace/oxydice_lib/src/str/die.rs create mode 100644 01.workspace/oxydice_lib/src/tst/dice_grab.rs diff --git a/01.workspace/oxydice_lib/src/fun/mod.rs b/01.workspace/oxydice_lib/src/fun/mod.rs index e69de29..8b13789 100644 --- a/01.workspace/oxydice_lib/src/fun/mod.rs +++ b/01.workspace/oxydice_lib/src/fun/mod.rs @@ -0,0 +1 @@ + diff --git a/01.workspace/oxydice_lib/src/imp/dice_grab.rs b/01.workspace/oxydice_lib/src/imp/dice_grab.rs new file mode 100644 index 0000000..67ec895 --- /dev/null +++ b/01.workspace/oxydice_lib/src/imp/dice_grab.rs @@ -0,0 +1,17 @@ +use crate::*; + +impl Dice { + pub fn grab(dice: u16, sides: u16) -> Self { + let mut handful = Vec::::new(); + for _ in 1..=dice { + handful.push(Die::new(sides)); + } + Self { handful } + } + pub fn and_grab(mut self, dice: u16, sides: u16) -> Self { + for _ in 1..=dice { + self.handful.push(Die::new(sides)); + } + self + } +} diff --git a/01.workspace/oxydice_lib/src/imp/die_new.rs b/01.workspace/oxydice_lib/src/imp/die_new.rs new file mode 100644 index 0000000..9e4a1ad --- /dev/null +++ b/01.workspace/oxydice_lib/src/imp/die_new.rs @@ -0,0 +1,7 @@ +use crate::*; + +impl Die { + pub fn new(sides: u16) -> Die { + Self { sides } + } +} diff --git a/01.workspace/oxydice_lib/src/imp/mod.rs b/01.workspace/oxydice_lib/src/imp/mod.rs index e69de29..7de7499 100644 --- a/01.workspace/oxydice_lib/src/imp/mod.rs +++ b/01.workspace/oxydice_lib/src/imp/mod.rs @@ -0,0 +1,2 @@ +pub mod dice_grab; +pub mod die_new; diff --git a/01.workspace/oxydice_lib/src/lib.rs b/01.workspace/oxydice_lib/src/lib.rs index 8784c5e..8a1c2a2 100644 --- a/01.workspace/oxydice_lib/src/lib.rs +++ b/01.workspace/oxydice_lib/src/lib.rs @@ -6,3 +6,6 @@ mod mcr; mod str; mod trt; mod tst; + +pub(crate) use crate::str::dice::O as Dice; +pub(crate) use crate::str::die::O as Die; diff --git a/01.workspace/oxydice_lib/src/mcr/mod.rs b/01.workspace/oxydice_lib/src/mcr/mod.rs index e69de29..8b13789 100644 --- a/01.workspace/oxydice_lib/src/mcr/mod.rs +++ b/01.workspace/oxydice_lib/src/mcr/mod.rs @@ -0,0 +1 @@ + diff --git a/01.workspace/oxydice_lib/src/str/dice.rs b/01.workspace/oxydice_lib/src/str/dice.rs new file mode 100644 index 0000000..dabf274 --- /dev/null +++ b/01.workspace/oxydice_lib/src/str/dice.rs @@ -0,0 +1,6 @@ +use crate::*; + +#[derive(Debug, Default, PartialEq, Clone)] +pub struct O { + pub(crate) handful: Vec, +} diff --git a/01.workspace/oxydice_lib/src/str/die.rs b/01.workspace/oxydice_lib/src/str/die.rs new file mode 100644 index 0000000..355c121 --- /dev/null +++ b/01.workspace/oxydice_lib/src/str/die.rs @@ -0,0 +1,6 @@ +use crate::*; + +#[derive(Debug, Default, PartialEq, Clone)] +pub struct O { + pub(crate) sides: u16, +} diff --git a/01.workspace/oxydice_lib/src/str/mod.rs b/01.workspace/oxydice_lib/src/str/mod.rs index e69de29..177f396 100644 --- a/01.workspace/oxydice_lib/src/str/mod.rs +++ b/01.workspace/oxydice_lib/src/str/mod.rs @@ -0,0 +1,2 @@ +pub mod dice; +pub mod die; diff --git a/01.workspace/oxydice_lib/src/trt/mod.rs b/01.workspace/oxydice_lib/src/trt/mod.rs index e69de29..8b13789 100644 --- a/01.workspace/oxydice_lib/src/trt/mod.rs +++ b/01.workspace/oxydice_lib/src/trt/mod.rs @@ -0,0 +1 @@ + diff --git a/01.workspace/oxydice_lib/src/tst/dice_grab.rs b/01.workspace/oxydice_lib/src/tst/dice_grab.rs new file mode 100644 index 0000000..1c08004 --- /dev/null +++ b/01.workspace/oxydice_lib/src/tst/dice_grab.rs @@ -0,0 +1,23 @@ +#[cfg(test)] +mod tests { + use crate::*; + #[test] + fn dice_grab_should_create_a_new_handful_of_dice() { + let dice_handful = Dice::grab(3, 6); + assert_eq!(dice_handful.handful.len(), 3); + for die in dice_handful.handful { + assert_eq!(die.sides, 6); + } + } + #[test] + fn test_dice_and_grab_should_add_more_dice_to_handful() { + let initial_dice = Dice::grab(2, 6); + let initial_count = initial_dice.handful.len(); + let new_dice_handful = initial_dice.and_grab(2, 8); + assert_eq!(new_dice_handful.handful.len(), initial_count + 2); + // Check the sides of the newly added dice + for i in initial_count..new_dice_handful.handful.len() { + assert_eq!(new_dice_handful.handful[i].sides, 8); + } + } +} diff --git a/01.workspace/oxydice_lib/src/tst/mod.rs b/01.workspace/oxydice_lib/src/tst/mod.rs index e69de29..60ec18c 100644 --- a/01.workspace/oxydice_lib/src/tst/mod.rs +++ b/01.workspace/oxydice_lib/src/tst/mod.rs @@ -0,0 +1,2 @@ + +pub mod dice_grab;