feat: add grab_range method to Handful
This commit is contained in:
@@ -1,14 +1,33 @@
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
use std::ops::*;
|
||||||
|
|
||||||
fn roll_sides(sides: u16) -> i32 {
|
fn roll_sides(sides: u16) -> i32 {
|
||||||
let mut rng = rand::rng();
|
let mut rng = rand::rng();
|
||||||
rng.random_range(1..=sides) as i32
|
rng.random_range(1..=sides) as i32
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn roll_range(range: RangeInclusive<i32>) -> i32 {
|
||||||
|
let mut rng = rand::rng();
|
||||||
|
rng.random_range(range)
|
||||||
|
}
|
||||||
|
|
||||||
impl Die {
|
impl Die {
|
||||||
pub fn roll(&self) -> i32 {
|
pub fn roll(&self) -> i32 {
|
||||||
match self {
|
match self {
|
||||||
Die::Sides(sides) => roll_sides(*sides),
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
use std::ops::*;
|
||||||
|
|
||||||
impl Handful {
|
impl Handful {
|
||||||
pub fn grab(dice_num: u16, sides: u16) -> Self {
|
pub fn grab(dice_num: u16, sides: u16) -> Self {
|
||||||
@@ -8,4 +9,11 @@ impl Handful {
|
|||||||
}
|
}
|
||||||
Self { dice }
|
Self { dice }
|
||||||
}
|
}
|
||||||
|
pub fn grab_range(dice_num: u16, range: RangeInclusive<i32>) -> Self {
|
||||||
|
let mut dice = Vec::<Die>::new();
|
||||||
|
for _ in 1..=dice_num {
|
||||||
|
dice.push(Die::Range(range.clone()));
|
||||||
|
}
|
||||||
|
Self { dice }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
use crate::*;
|
use crate::*;
|
||||||
|
use std::ops::*;
|
||||||
// use std::fmt::Display;
|
// use std::fmt::Display;
|
||||||
// use std::str::FromStr;
|
// use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone, Copy, Hash)]
|
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
|
||||||
pub enum E {
|
pub enum E {
|
||||||
Sides(u16),
|
Sides(u16),
|
||||||
|
Range(RangeInclusive<i32>),
|
||||||
}
|
}
|
||||||
|
|
||||||
// impl Display for E {
|
// impl Display for E {
|
||||||
|
|||||||
Reference in New Issue
Block a user