#[inline]
pub fn sleep_ms(ms: u32) {
std::thread::sleep(std::time::Duration::from_millis(ms as u64));
}
#[cfg(test)]
mod tests {
use super::*;
use std::time::Instant;
#[test]
fn test_sleep_ms_basic() {
let start = Instant::now();
sleep_ms(10);
let elapsed = start.elapsed();
assert!(elapsed.as_millis() >= 10, "Slept for {:?}, expected at least 10ms", elapsed);
assert!(elapsed.as_millis() < 50, "Slept for {:?}, expected less than 50ms", elapsed);
}
#[test]
fn test_sleep_ms_zero() {
let start = Instant::now();
sleep_ms(0);
let elapsed = start.elapsed();
assert!(elapsed.as_millis() < 10, "Zero sleep took too long: {:?}", elapsed);
}
#[test]
fn test_sleep_ms_accuracy() {
let test_cases = vec![1, 5, 10, 20, 50];
for ms in test_cases {
let start = Instant::now();
sleep_ms(ms);
let elapsed = start.elapsed().as_millis();
let min_expected = ms as u128;
let max_expected = if ms < 10 {
(ms as f64 * 5.0) as u128 } else {
(ms as f64 * 2.0) as u128 };
assert!(
elapsed >= min_expected && elapsed <= max_expected,
"sleep_ms({}) resulted in {}ms (expected {}-{}ms)",
ms,
elapsed,
min_expected,
max_expected
);
}
}
}