execution_time/traits/
singular_plural.rs#[derive(Debug)]
pub enum Unit {
Second,
Minute,
Hour,
Day,
Foot, Ox, }
pub trait SingularPlural {
fn singular(&self) -> &str;
fn plural(&self) -> &str;
}
impl SingularPlural for Unit {
fn singular(&self) -> &str {
match self {
Unit::Second => "second",
Unit::Minute => "minute",
Unit::Hour => "hour",
Unit::Day => "day",
Unit::Foot => "foot",
Unit::Ox => "ox",
}
}
fn plural(&self) -> &str {
match self {
Unit::Second => "seconds",
Unit::Minute => "minutes",
Unit::Hour => "hours",
Unit::Day => "days",
Unit::Foot => "feet",
Unit::Ox => "oxen",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_singular_forms() {
assert_eq!(Unit::Second.singular(), "second");
assert_eq!(Unit::Minute.singular(), "minute");
assert_eq!(Unit::Hour.singular(), "hour");
assert_eq!(Unit::Day.singular(), "day");
assert_eq!(Unit::Foot.singular(), "foot");
assert_eq!(Unit::Ox.singular(), "ox");
}
#[test]
fn test_plural_forms() {
assert_eq!(Unit::Second.plural(), "seconds");
assert_eq!(Unit::Minute.plural(), "minutes");
assert_eq!(Unit::Hour.plural(), "hours");
assert_eq!(Unit::Day.plural(), "days");
assert_eq!(Unit::Foot.plural(), "feet");
assert_eq!(Unit::Ox.plural(), "oxen");
}
#[test]
fn test_singular_plural_trait() {
let unit = Unit::Hour;
assert_eq!(unit.singular(), "hour");
assert_eq!(unit.plural(), "hours");
let unit = Unit::Foot;
assert_eq!(unit.singular(), "foot");
assert_eq!(unit.plural(), "feet");
}
}