pub fn format_tokens(n: u64) -> String {
if n >= 1_000_000 {
format!("{:.1}M", n as f64 / 1_000_000.0)
} else if n >= 1_000 {
format!("{}K", n / 1_000)
} else {
n.to_string()
}
}
pub fn format_duration(secs: u64) -> String {
if secs >= 3600 {
format!("{:.1}h", secs as f64 / 3600.0)
} else if secs >= 60 {
format!("{}m", secs / 60)
} else {
format!("{}s", secs)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_format_tokens_millions() {
assert_eq!(format_tokens(5_200_000), "5.2M");
assert_eq!(format_tokens(1_000_000), "1.0M");
assert_eq!(format_tokens(12_500_000), "12.5M");
}
#[test]
fn test_format_tokens_kilo() {
assert_eq!(format_tokens(123_000), "123K");
assert_eq!(format_tokens(1_000), "1K");
assert_eq!(format_tokens(999), "999");
}
#[test]
fn test_format_tokens_small() {
assert_eq!(format_tokens(500), "500");
assert_eq!(format_tokens(0), "0");
}
#[test]
fn test_format_tokens_boundary_values() {
assert_eq!(format_tokens(999), "999");
assert_eq!(format_tokens(1_000), "1K");
assert_eq!(format_tokens(999_999), "999K");
assert_eq!(format_tokens(1_000_000), "1.0M");
assert_eq!(format_tokens(999), "999");
assert_eq!(format_tokens(999_999), "999K");
assert_eq!(format_tokens(1_001), "1K"); assert_eq!(format_tokens(1_000_001), "1.0M");
}
#[test]
fn test_format_tokens_large_values() {
assert_eq!(format_tokens(100_000_000), "100.0M");
assert_eq!(format_tokens(1_500_000_000), "1500.0M");
}
}