#![forbid(unsafe_code)]
use clock_kit::{Clock, MockClock};
#[test]
fn mono_never_regresses_under_all_sources() {
let system = clock_kit::SystemClock::new();
let mut prev = system.now().mono;
for _ in 0..1_000 {
let t = system.now();
assert!(t.mono >= prev, "system mono regressed");
prev = t.mono;
}
#[cfg(all(feature = "tsc", any(target_arch = "x86_64", target_arch = "aarch64")))]
{
let clock = clock_kit::calibrated::CalibratedClock::new(10_000);
let mut prev = clock.now().mono;
for _ in 0..10_000 {
let t = clock.now();
assert!(t.mono >= prev, "calibrated mono regressed under load");
prev = t.mono;
}
}
let mock = MockClock::start_at(5, 5);
let mut prev = mock.now().mono;
for i in 0..100_u64 {
mock.advance_nanos(i);
let t = mock.now();
assert!(t.mono >= prev, "mock mono regressed");
prev = t.mono;
}
assert_eq!(prev, 5 + (0..100_u64).sum::<u64>());
}
#[cfg(all(feature = "tsc", any(target_arch = "x86_64", target_arch = "aarch64")))]
#[test]
fn floor_is_shared_across_sources() {
let calibrated = clock_kit::calibrated::CalibratedClock::new(10_000);
let system = clock_kit::SystemClock::new();
let mut prev_cal = calibrated.now().mono;
let mut prev_sys = system.now().mono;
for _ in 0..500 {
let t = calibrated.now();
assert!(t.mono >= prev_cal);
prev_cal = t.mono;
let t = system.now();
assert!(t.mono >= prev_sys);
prev_sys = t.mono;
}
}