textris 0.2.0

Tetris on terminal!
Documentation
use std::fmt;

#[derive(Debug, PartialEq, Eq)]
pub struct Elapsed {
    hours: u64,
    minutes: u64,
    seconds: u64,
}

impl Elapsed {
    pub fn new() -> Self {
        Elapsed {
            hours: 0,
            minutes: 0,
            seconds: 0,
        }
    }

    pub fn add_secs(&mut self, added: u64) {
        let secs = self.hours * 3600 + self.minutes * 60 + self.seconds + added;
        self.hours = secs / 3600;
        self.minutes = (secs % 3600) / 60;
        self.seconds = secs % 60;
    }
}

impl fmt::Display for Elapsed {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(
            f,
            "{:02}:{:02}:{:02}",
            self.hours, self.minutes, self.seconds
        )
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn elapsed_display() {
        let e = Elapsed {
            hours: 7,
            minutes: 34,
            seconds: 52,
        };
        assert_eq!(format!("{}", e), "07:34:52");
    }

    #[test]
    fn elapsed_add_secs() {
        struct Case {
            secs: u64,
            expected: Elapsed,
        };
        let cases = [
            Case {
                secs: 30,
                expected: Elapsed {
                    hours: 0,
                    minutes: 0,
                    seconds: 30,
                },
            },
            Case {
                secs: 5001,
                expected: Elapsed {
                    hours: 1,
                    minutes: 23,
                    seconds: 21,
                },
            },
        ];
        for (i, Case { secs, expected }) in cases.iter().enumerate() {
            let mut e = Elapsed::new();
            e.add_secs(*secs);
            assert_eq!(e, *expected, "test[{}]", i);
        }
    }
}