1pub fn format_latency_us(us: i64) -> String {
20 if us < 1_000 {
21 format!("{us}μs")
22 } else {
23 let ms = us as f64 / 1_000.0;
24 if ms >= 1_000.0 {
25 let ms_int = (ms + 0.5) as i64;
26 format!("{},{:03}ms", ms_int / 1000, ms_int % 1000)
27 } else {
28 format!("{ms:.2}ms")
29 }
30 }
31}
32
33#[cfg(test)]
34#[allow(non_snake_case)]
35mod tests {
36 use super::*;
37
38 #[test]
39 fn format_latency_us__sub_ms() {
40 assert_eq!(format_latency_us(0), "0μs");
41 assert_eq!(format_latency_us(1), "1μs");
42 assert_eq!(format_latency_us(200), "200μs");
43 assert_eq!(format_latency_us(999), "999μs");
44 }
45
46 #[test]
47 fn format_latency_us__ms_range() {
48 assert_eq!(format_latency_us(1_000), "1.00ms");
49 assert_eq!(format_latency_us(1_500), "1.50ms");
50 assert_eq!(format_latency_us(4_200), "4.20ms");
51 assert_eq!(format_latency_us(10_250), "10.25ms");
52 assert_eq!(format_latency_us(142_000), "142.00ms");
53 assert_eq!(format_latency_us(500_000), "500.00ms");
54 }
55
56 #[test]
57 fn format_latency_us__seconds_range() {
58 assert_eq!(format_latency_us(1_000_000), "1,000ms");
59 assert_eq!(format_latency_us(1_500_000), "1,500ms");
60 assert_eq!(format_latency_us(4_201_000), "4,201ms");
61 assert_eq!(format_latency_us(12_345_000), "12,345ms");
62 }
63
64 #[test]
65 fn format_latency_us__boundary_us_to_ms() {
66 assert_eq!(format_latency_us(999), "999μs");
67 assert_eq!(format_latency_us(1_000), "1.00ms");
68 }
69
70 #[test]
71 fn format_latency_us__boundary_ms_to_s() {
72 assert_eq!(format_latency_us(999_999), "1000.00ms");
73 assert_eq!(format_latency_us(1_000_000), "1,000ms");
74 }
75}