#![cfg(feature = "chronoshift")]
use chronoshift::Clock as CsClock;
use clock_kit::{Clock, ClockSource, MockClock, SyncQuality};
use std::time::Duration;
#[test]
fn chronoshift_clocks_are_clock_kit_clocks() {
let cs = chronoshift::mock::MockClock::new(1_000);
let t0 = cs.now(); assert_eq!(t0.wall.unix_nanos(), 1_000);
assert!(t0.mono >= t0.wall.unix_nanos(), "floor may only raise mono");
assert_eq!(Clock::source(&cs), ClockSource::External);
assert_eq!(Clock::quality(&cs), SyncQuality::Fallback);
cs.advance_ns(500);
let t1 = cs.now();
assert_eq!(t1.wall.unix_nanos(), 1_500);
assert!(t1.mono >= t0.mono, "mono never regresses (REQ-CLK-001)");
cs.set_ns(1_500_000); assert_eq!(chronoshift_now_ms(&cs), 1);
}
fn chronoshift_now_ms<C: CsClock>(c: &C) -> i64 {
c.now_ms()
}
#[test]
fn bridged_clock_honors_monotonic_floor() {
let cs = chronoshift::mock::MockClock::new(10_000);
let first = cs.now().mono;
cs.set_ns(5_000); let after = cs.now().mono;
assert!(
after >= first,
"bridged source regression must be clamped, not observed"
);
}
#[test]
fn kit_clocks_are_not_chronoshift_clocks() {
let kit = MockClock::start_at(1, 2);
kit.advance(Duration::from_nanos(3));
assert_eq!(kit.now().mono, 4);
assert_eq!(kit.source(), ClockSource::Mock);
}