use std::time::{SystemTime, UNIX_EPOCH};
#[must_use]
pub fn current_timestamp() -> u64 {
SystemTime::now()
.duration_since(UNIX_EPOCH)
.expect("System time should not be before Unix epoch")
.as_secs()
}
#[must_use]
pub fn format_duration(secs: u64) -> String {
if secs < 60 {
format!("{secs}s")
} else if secs < 3600 {
format!("{}m {}s", secs / 60, secs % 60)
} else {
format!("{}h {}m {}s", secs / 3600, (secs % 3600) / 60, secs % 60)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_current_timestamp() {
let timestamp = current_timestamp();
assert!(timestamp > 0);
assert!(timestamp > 1_577_836_800); }
#[test]
fn test_format_duration_seconds() {
assert_eq!(format_duration(0), "0s");
assert_eq!(format_duration(30), "30s");
assert_eq!(format_duration(59), "59s");
}
#[test]
fn test_format_duration_minutes() {
assert_eq!(format_duration(60), "1m 0s");
assert_eq!(format_duration(90), "1m 30s");
assert_eq!(format_duration(125), "2m 5s");
assert_eq!(format_duration(3599), "59m 59s");
}
#[test]
fn test_format_duration_hours() {
assert_eq!(format_duration(3600), "1h 0m 0s");
assert_eq!(format_duration(3661), "1h 1m 1s");
assert_eq!(format_duration(7325), "2h 2m 5s");
}
}