review: replace i32 with Vec<i32> as roll return type for future exploding dice

This commit is contained in:
2025-11-16 10:28:53 +01:00
parent 98249789ee
commit f5e5ee2c91
2 changed files with 7 additions and 7 deletions

View File

@@ -1,18 +1,18 @@
use crate::*; use crate::*;
use std::ops::*; use std::ops::*;
fn roll_sides(sides: u16) -> i32 { fn roll_sides(sides: u16) -> Vec<i32> {
let mut rng = rand::rng(); let mut rng = rand::rng();
rng.random_range(1..=sides) as i32 vec![rng.random_range(1..=sides as i32)]
} }
fn roll_range(range: RangeInclusive<i32>) -> i32 { fn roll_range(range: RangeInclusive<i32>) -> Vec<i32> {
let mut rng = rand::rng(); let mut rng = rand::rng();
rng.random_range(range) vec![rng.random_range(range)]
} }
impl Die { impl Die {
pub fn roll(&self) -> i32 { pub fn roll(&self) -> Vec<i32> {
match self { match self {
Die::Sides(sides) => roll_sides(*sides), Die::Sides(sides) => roll_sides(*sides),
Die::Range(range) => roll_range(range.clone()), Die::Range(range) => roll_range(range.clone()),
@@ -27,7 +27,7 @@ mod tests {
fn check_roll_range() { fn check_roll_range() {
let die = Die::Range(5..=5); let die = Die::Range(5..=5);
for _ in 1..=1000 { for _ in 1..=1000 {
assert_eq!(die.roll(), 5); assert_eq!(die.roll(), [5]);
} }
} }
} }

View File

@@ -4,7 +4,7 @@ impl Handful {
pub fn roll(self) -> Outcome { pub fn roll(self) -> Outcome {
let mut die_rolls = Vec::<i32>::new(); let mut die_rolls = Vec::<i32>::new();
for die in self.dice { for die in self.dice {
die_rolls.push(die.roll()); die_rolls.append(&mut die.roll());
} }
Outcome::List(die_rolls) Outcome::List(die_rolls)
} }