extern crate alloc;
use crate::kairos::{Clock, TickCounter};
#[test]
fn test_monotonicity_and_components() {
let clock = Clock::with_default_config(TickCounter::new(), 42).unwrap();
let t1 = clock.now(0u16);
let t2 = clock.now(0u16);
assert!(t2 > t1, "Local timestamps must be monotonic");
assert_eq!(t1.physical(), 0);
assert_eq!(t1.logical(), 0);
assert_eq!(t1.kairotic(), 0);
assert_eq!(t1.station_id(), 42);
assert_eq!(t2.physical(), 1);
assert_eq!(t2.logical(), 0);
assert_eq!(t2.kairotic(), 0);
assert_eq!(t2.station_id(), 42);
}
#[test]
fn test_station_id_uniqueness() {
let clock1 = Clock::with_default_config(TickCounter::new(), 1).unwrap();
let clock2 = Clock::with_default_config(TickCounter::new(), 2).unwrap();
let t1 = clock1.now(0u16);
let t2 = clock2.now(0u16);
assert_ne!(t1, t2);
assert!(t2 > t1); assert_eq!(t1.kairotic(), 0);
assert_eq!(t2.kairotic(), 0);
}
#[test]
fn test_kairotic() {
let clock = Clock::with_default_config(TickCounter::new(), 1).unwrap();
let t1 = clock.now(42u16);
assert_eq!(t1.kairotic(), 42);
let t2 = clock.after(t1, 100u16);
assert_eq!(t2.kairotic(), 100);
}