use crate::metrics::{
gpu::{amd, GpuEntry},
HISTORY_LEN,
};
#[test]
fn test_gpu_entry_new_stores_name() {
let entry = GpuEntry::new("AMD Radeon RX 7900 XTX".to_string());
assert_eq!(entry.name, "AMD Radeon RX 7900 XTX");
}
#[test]
fn test_gpu_entry_new_numeric_fields_are_zero() {
let entry = GpuEntry::new("test".to_string());
assert_eq!(entry.utilization, 0.0);
assert_eq!(entry.mem_used, 0);
assert_eq!(entry.mem_total, 0);
}
#[test]
fn test_gpu_entry_new_mem_is_gtt_is_false() {
let entry = GpuEntry::new("test".to_string());
assert!(!entry.mem_is_gtt, "mem_is_gtt should be false on construction");
}
#[test]
fn test_gpu_entry_new_optional_fields_are_none() {
let entry = GpuEntry::new("test".to_string());
assert!(entry.temperature.is_none(), "temperature should be None initially");
assert!(entry.power_watts.is_none(), "power_watts should be None initially");
}
#[test]
fn test_gpu_entry_new_history_lengths_and_zeroed() {
let entry = GpuEntry::new("test".to_string());
assert_eq!(entry.util_history.len(), HISTORY_LEN);
assert_eq!(entry.mem_history.len(), HISTORY_LEN);
assert!(entry.util_history.iter().all(|&v| v == 0.0));
assert!(entry.mem_history.iter().all(|&v| v == 0.0));
}
#[test]
fn test_amd_refresh_does_not_panic() {
let mut gpus: Vec<GpuEntry> = Vec::new();
amd::refresh(&mut gpus);
}
#[test]
fn test_amd_refresh_mem_used_lte_total() {
let mut gpus: Vec<GpuEntry> = Vec::new();
amd::refresh(&mut gpus);
for gpu in &gpus {
assert!(
gpu.mem_used <= gpu.mem_total,
"GPU '{}' mem_used ({}) > mem_total ({})",
gpu.name,
gpu.mem_used,
gpu.mem_total
);
}
}
#[test]
fn test_amd_refresh_utilization_in_valid_range() {
let mut gpus: Vec<GpuEntry> = Vec::new();
amd::refresh(&mut gpus);
for gpu in &gpus {
assert!(
(0.0..=100.0).contains(&gpu.utilization),
"GPU '{}' utilization {} is outside [0, 100]",
gpu.name,
gpu.utilization
);
}
}