From 9c0711a54c594f1da548860bbeeeac7cc6f59e02 Mon Sep 17 00:00:00 2001 From: Xevion Date: Sun, 17 Aug 2025 23:47:30 -0500 Subject: [PATCH] test: add more formatting tests --- tests/formatting.rs | 79 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 78 insertions(+), 1 deletion(-) diff --git a/tests/formatting.rs b/tests/formatting.rs index c008aec..5111842 100644 --- a/tests/formatting.rs +++ b/tests/formatting.rs @@ -19,7 +19,7 @@ fn get_formatted_output() -> impl IntoIterator { } #[test] -fn test_formatting_alignment() { +fn test_complex_formatting_alignment() { let mut colon_positions = vec![]; let mut first_decimal_positions = vec![]; let mut second_decimal_positions = vec![]; @@ -93,3 +93,80 @@ fn test_formatting_alignment() { second_unit_positions ); } + +#[test] +fn test_format_timing_display_basic() { + let timing_data = vec![ + ("render".to_string(), Duration::from_micros(1500), Duration::from_micros(200)), + ("input".to_string(), Duration::from_micros(300), Duration::from_micros(50)), + ("physics".to_string(), Duration::from_nanos(750), Duration::from_nanos(100)), + ]; + + let formatted = format_timing_display(timing_data); + + // Should have 3 lines (one for each system) + assert_eq!(formatted.len(), 3); + + // Each line should contain the system name + assert!(formatted.iter().any(|line| line.contains("render"))); + assert!(formatted.iter().any(|line| line.contains("input"))); + assert!(formatted.iter().any(|line| line.contains("physics"))); + + // Each line should contain timing information with proper units + for line in formatted.iter() { + assert!(line.contains(":"), "Line should contain colon separator: {}", line); + assert!(line.contains("±"), "Line should contain ± symbol: {}", line); + } +} + +#[test] +fn test_format_timing_display_empty() { + let timing_data = vec![]; + let formatted = format_timing_display(timing_data); + assert!(formatted.is_empty()); +} + +#[test] +fn test_format_timing_display_units() { + let timing_data = vec![ + ("seconds".to_string(), Duration::from_secs(2), Duration::from_millis(100)), + ("millis".to_string(), Duration::from_millis(15), Duration::from_micros(200)), + ("micros".to_string(), Duration::from_micros(500), Duration::from_nanos(50)), + ("nanos".to_string(), Duration::from_nanos(250), Duration::from_nanos(25)), + ]; + + let formatted = format_timing_display(timing_data); + + // Check that appropriate units are used + let all_lines = formatted.join(" "); + assert!(all_lines.contains("s"), "Should contain seconds unit"); + assert!(all_lines.contains("ms"), "Should contain milliseconds unit"); + assert!(all_lines.contains("µs"), "Should contain microseconds unit"); + assert!(all_lines.contains("ns"), "Should contain nanoseconds unit"); +} + +#[test] +fn test_format_timing_display_alignment() { + let timing_data = vec![ + ("short".to_string(), Duration::from_micros(100), Duration::from_micros(10)), + ( + "very_long_name".to_string(), + Duration::from_micros(200), + Duration::from_micros(20), + ), + ]; + + let formatted = format_timing_display(timing_data); + + // Find colon positions - they should be aligned + let colon_positions: Vec = formatted.iter().map(|line| line.find(':').unwrap_or(0)).collect(); + + // All colons should be at the same position (aligned) + if colon_positions.len() > 1 { + let first_pos = colon_positions[0]; + assert!( + colon_positions.iter().all(|&pos| pos == first_pos), + "Colons should be aligned at the same position" + ); + } +}