diff --git a/src/weapon.rs b/src/weapon.rs index 4a0ee67..eb0c03d 100644 --- a/src/weapon.rs +++ b/src/weapon.rs @@ -22,7 +22,10 @@ impl Weapon { self.durability <= 0 } - pub fn if_not_broken(&mut self, fun: impl FnOnce(u8) -> T) -> Option { + pub fn if_not_broken(&mut self, fun: F) -> Option + where + F: FnOnce(u8) -> T, + { if !self.is_broken() { Some(fun(self.damage)) } else { @@ -34,3 +37,30 @@ impl Weapon { self.name } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn weapon_build() { + let w = Weapon::new("test", 10, 100); + assert_eq!(w.damage, 10); + assert_eq!(w.durability, 100); + assert_eq!(w.get_name(), w.name); + } + + #[test] + fn weapon_consumption() { + let mut w = Weapon::new("test", 10, 100); + w.consume(); + assert_eq!(w.durability, 95); + } + + #[test] + fn weapon_if_not_broken() { + let mut w = Weapon::new("test", 10, 100); + let val: u8 = 50; + assert_eq!(w.if_not_broken(|d: u8| { val - d }).unwrap(), 40); + } +}