execution_time/traits/
singular_plural.rs

1/// Unit types with their singular/plural pairs
2#[derive(Debug)]
3pub enum Unit {
4    Second,
5    Minute,
6    Hour,
7    Day,
8}
9
10/// Trait for defining singular and plural forms of words.
11pub trait SingularPlural {
12    /// Gets the singular form of the word.
13    fn singular(&self) -> &str;
14
15    /// Gets the plural form of the word.
16    fn plural(&self) -> &str;
17}
18
19impl SingularPlural for Unit {
20    fn singular(&self) -> &str {
21        match self {
22            Unit::Second => "second",
23            Unit::Minute => "minute",
24            Unit::Hour => "hour",
25            Unit::Day => "day",
26        }
27    }
28
29    fn plural(&self) -> &str {
30        match self {
31            Unit::Second => "seconds",
32            Unit::Minute => "minutes",
33            Unit::Hour => "hours",
34            Unit::Day => "days",
35        }
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn test_singular_forms() {
45        // Test that singular method returns the correct singular form for all units
46        assert_eq!(Unit::Second.singular(), "second");
47        assert_eq!(Unit::Minute.singular(), "minute");
48        assert_eq!(Unit::Hour.singular(), "hour");
49        assert_eq!(Unit::Day.singular(), "day");
50    }
51
52    #[test]
53    fn test_plural_forms() {
54        // Test that plural method returns the correct plural form for all units
55        assert_eq!(Unit::Second.plural(), "seconds");
56        assert_eq!(Unit::Minute.plural(), "minutes");
57        assert_eq!(Unit::Hour.plural(), "hours");
58        assert_eq!(Unit::Day.plural(), "days");
59    }
60
61    #[test]
62    fn test_singular_plural_trait() {
63        // Test that a type implementing SingularPlural returns singular and plural
64        let unit = Unit::Hour;
65        assert_eq!(unit.singular(), "hour");
66        assert_eq!(unit.plural(), "hours");
67    }
68}