#![crate_name = "tiny_die"]
#![no_std]
#[cfg(test)]
mod tests {
use crate::tiny_die::Die;
#[test]
fn non_zero_roll() {
let dee_six = Die::new(6);
assert_ne!(dee_six.roll(), 0);
}
#[test]
fn less_equal_n_sides_roll() {
let n_sides: u8 = 20;
let dee_twenty = Die::new(n_sides);
assert!(dee_twenty.roll() <= n_sides);
}
#[test]
fn default_dee_six() {
let dee_six = Die::default();
assert_eq!(dee_six.sides, 6);
}
}
pub mod tiny_die {
use core::fmt;
use rand::Rng;
pub struct Die {
pub sides: u8,
}
impl Die {
pub fn new(sides: u8) -> Self {
Self { sides: sides }
}
pub fn default() -> Self {
Self::new(6)
}
pub fn roll(&self) -> u8 {
rand::thread_rng().gen_range(1, self.sides + 1)
}
}
impl fmt::Display for Die {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.roll())
}
}
}