mirror of
https://github.com/Xevion/Pac-Man.git
synced 2025-12-10 18:07:56 -06:00
feat: debug text rendering of statistics, formatting with tests
This commit is contained in:
135
tests/formatting.rs
Normal file
135
tests/formatting.rs
Normal file
@@ -0,0 +1,135 @@
|
||||
use pacman::systems::formatting::format_timing_display;
|
||||
use std::time::Duration;
|
||||
|
||||
#[test]
|
||||
fn test_basic_formatting() {
|
||||
let timing_data = vec![
|
||||
("60 FPS".to_string(), Duration::from_micros(1234), Duration::from_micros(567)),
|
||||
("input".to_string(), Duration::from_micros(123), Duration::from_micros(45)),
|
||||
("player".to_string(), Duration::from_micros(456), Duration::from_micros(123)),
|
||||
("movement".to_string(), Duration::from_micros(789), Duration::from_micros(234)),
|
||||
("render".to_string(), Duration::from_micros(12), Duration::from_micros(3)),
|
||||
("debug".to_string(), Duration::from_nanos(1000000), Duration::from_nanos(1000)),
|
||||
];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Basic formatting test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_desired_format() {
|
||||
// This test represents the exact format you want to achieve
|
||||
let timing_data = vec![
|
||||
("total".to_string(), Duration::from_micros(1230), Duration::from_micros(570)),
|
||||
("input".to_string(), Duration::from_micros(120), Duration::from_micros(50)),
|
||||
("player".to_string(), Duration::from_micros(460), Duration::from_micros(120)),
|
||||
("movement".to_string(), Duration::from_micros(790), Duration::from_micros(230)),
|
||||
("render".to_string(), Duration::from_micros(10), Duration::from_micros(3)),
|
||||
("debug".to_string(), Duration::from_nanos(1000000), Duration::from_nanos(1000)),
|
||||
];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Desired format test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
|
||||
// Expected output should look like:
|
||||
// total : 1.23 ms ± 0.57 ms
|
||||
// input : 0.12 ms ± 0.05 ms
|
||||
// player : 0.46 ms ± 0.12 ms
|
||||
// movement : 0.79 ms ± 0.23 ms
|
||||
// render : 0.01 ms ± 0.003ms
|
||||
// debug : 0.001ms ± 0.000ms
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_mixed_units() {
|
||||
let timing_data = vec![
|
||||
("60 FPS".to_string(), Duration::from_millis(16), Duration::from_micros(500)),
|
||||
(
|
||||
"fast_system".to_string(),
|
||||
Duration::from_nanos(500000),
|
||||
Duration::from_nanos(100000),
|
||||
),
|
||||
(
|
||||
"medium_system".to_string(),
|
||||
Duration::from_micros(2500),
|
||||
Duration::from_micros(500),
|
||||
),
|
||||
("slow_system".to_string(), Duration::from_millis(5), Duration::from_millis(1)),
|
||||
];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Mixed units test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_trailing_zeros() {
|
||||
let timing_data = vec![
|
||||
("60 FPS".to_string(), Duration::from_micros(1000), Duration::from_micros(500)),
|
||||
("exact_ms".to_string(), Duration::from_millis(1), Duration::from_micros(100)),
|
||||
("exact_us".to_string(), Duration::from_micros(1), Duration::from_nanos(100000)),
|
||||
("exact_ns".to_string(), Duration::from_nanos(1000), Duration::from_nanos(100)),
|
||||
];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Trailing zeros test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_edge_cases() {
|
||||
let timing_data = vec![
|
||||
("60 FPS".to_string(), Duration::from_nanos(1), Duration::from_nanos(1)),
|
||||
("very_small".to_string(), Duration::from_nanos(100), Duration::from_nanos(50)),
|
||||
("very_large".to_string(), Duration::from_secs(1), Duration::from_millis(100)),
|
||||
("zero_time".to_string(), Duration::ZERO, Duration::ZERO),
|
||||
];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Edge cases test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_variable_name_lengths() {
|
||||
let timing_data = vec![
|
||||
("60 FPS".to_string(), Duration::from_micros(1234), Duration::from_micros(567)),
|
||||
("a".to_string(), Duration::from_micros(123), Duration::from_micros(45)),
|
||||
(
|
||||
"very_long_system_name".to_string(),
|
||||
Duration::from_micros(456),
|
||||
Duration::from_micros(123),
|
||||
),
|
||||
("medium".to_string(), Duration::from_micros(789), Duration::from_micros(234)),
|
||||
];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Variable name lengths test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_empty_input() {
|
||||
let timing_data = vec![];
|
||||
let result = format_timing_display(timing_data);
|
||||
assert_eq!(result, "");
|
||||
println!("Empty input test: PASS");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_single_entry() {
|
||||
let timing_data = vec![("60 FPS".to_string(), Duration::from_micros(1234), Duration::from_micros(567))];
|
||||
|
||||
let result = format_timing_display(timing_data);
|
||||
println!("Single entry test:");
|
||||
println!("{}", result);
|
||||
println!();
|
||||
}
|
||||
Reference in New Issue
Block a user