diff --git a/01.workspace/oxidice_lib/src/imp/die_roll.rs b/01.workspace/oxidice_lib/src/imp/die_roll.rs index d6ef57b..2fcf4cb 100644 --- a/01.workspace/oxidice_lib/src/imp/die_roll.rs +++ b/01.workspace/oxidice_lib/src/imp/die_roll.rs @@ -1,14 +1,33 @@ use crate::*; +use std::ops::*; fn roll_sides(sides: u16) -> i32 { let mut rng = rand::rng(); rng.random_range(1..=sides) as i32 } +fn roll_range(range: RangeInclusive) -> i32 { + let mut rng = rand::rng(); + rng.random_range(range) +} + impl Die { pub fn roll(&self) -> i32 { match self { Die::Sides(sides) => roll_sides(*sides), + Die::Range(range) => roll_range(range.clone()), + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + #[test] + fn check_roll_range() { + let die = Die::Range(5..=5); + for _ in 1..=1000 { + assert_eq!(die.roll(), 5); } } } diff --git a/01.workspace/oxidice_lib/src/imp/handful_grab.rs b/01.workspace/oxidice_lib/src/imp/handful_grab.rs index bf6bc3a..434cf36 100644 --- a/01.workspace/oxidice_lib/src/imp/handful_grab.rs +++ b/01.workspace/oxidice_lib/src/imp/handful_grab.rs @@ -1,4 +1,5 @@ use crate::*; +use std::ops::*; impl Handful { pub fn grab(dice_num: u16, sides: u16) -> Self { @@ -8,4 +9,11 @@ impl Handful { } Self { dice } } + pub fn grab_range(dice_num: u16, range: RangeInclusive) -> Self { + let mut dice = Vec::::new(); + for _ in 1..=dice_num { + dice.push(Die::Range(range.clone())); + } + Self { dice } + } } diff --git a/01.workspace/oxidice_lib/src/str/die.rs b/01.workspace/oxidice_lib/src/str/die.rs index 85a9352..8e0910d 100644 --- a/01.workspace/oxidice_lib/src/str/die.rs +++ b/01.workspace/oxidice_lib/src/str/die.rs @@ -1,10 +1,12 @@ use crate::*; +use std::ops::*; // use std::fmt::Display; // use std::str::FromStr; -#[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone, Copy, Hash)] +#[derive(Debug, PartialEq, Eq, Clone, Hash)] pub enum E { Sides(u16), + Range(RangeInclusive), } // impl Display for E {