use crate::metrics::{push_history, HISTORY_LEN};
#[test]
fn test_push_single_item_into_empty() {
let mut v: Vec<u32> = Vec::new();
push_history(&mut v, 42);
assert_eq!(v.len(), 1);
assert_eq!(v[0], 42);
}
#[test]
fn test_push_grows_to_capacity() {
let mut v: Vec<f32> = Vec::new();
for i in 0..HISTORY_LEN {
push_history(&mut v, i as f32);
}
assert_eq!(v.len(), HISTORY_LEN);
assert_eq!(v[0], 0.0);
assert_eq!(v[HISTORY_LEN - 1], (HISTORY_LEN - 1) as f32);
}
#[test]
fn test_push_evicts_oldest_when_full() {
let mut v: Vec<u32> = (0..HISTORY_LEN as u32).collect();
push_history(&mut v, 999);
assert_eq!(v.len(), HISTORY_LEN, "length must stay at HISTORY_LEN");
assert_eq!(v[0], 1, "oldest element (0) must have been evicted");
assert_eq!(*v.last().unwrap(), 999, "new value must be at the end");
}
#[test]
fn test_push_maintains_length_after_overflow() {
let mut v: Vec<i32> = (0..HISTORY_LEN as i32).collect();
for extra in 0..5_i32 {
push_history(&mut v, 1000 + extra);
}
assert_eq!(v.len(), HISTORY_LEN);
for (offset, extra) in (0..5_i32).enumerate() {
assert_eq!(v[HISTORY_LEN - 5 + offset], 1000 + extra);
}
}
#[test]
fn test_push_u64_values() {
let mut v: Vec<u64> = Vec::new();
push_history(&mut v, u64::MAX);
push_history(&mut v, 0);
assert_eq!(v[0], u64::MAX);
assert_eq!(v[1], 0);
}