Files
k-os/crates/domain/src/timer_tests.rs

38 lines
1.2 KiB
Rust

use super::{Target, Timers};
use types::{badge::Badge, generation::Generation, id::NotificationId, id::ProcessId, time::Ticks};
fn target(n: u16) -> Target {
Target {
notification: NotificationId::from_raw(n),
generation: Generation::initial(),
badge: Badge::NONE,
}
}
fn pid(n: u16) -> ProcessId {
ProcessId::from_raw(n)
}
#[test]
fn only_expired_timers_fire_and_each_fires_once() {
let mut t = Timers::new();
t.set(pid(0), Ticks::from_raw(10), target(0));
t.set(pid(1), Ticks::from_raw(30), target(1));
assert_eq!(t.earliest(), Some(Ticks::from_raw(10)));
assert_eq!(t.take_expired(Ticks::from_raw(9)), None);
assert_eq!(t.take_expired(Ticks::from_raw(10)), Some(target(0)));
assert_eq!(t.take_expired(Ticks::from_raw(29)), None);
assert_eq!(t.earliest(), Some(Ticks::from_raw(30)));
}
#[test]
fn setting_again_replaces_and_clear_cancels() {
let mut t = Timers::new();
t.set(pid(2), Ticks::from_raw(10), target(0));
t.set(pid(2), Ticks::from_raw(50), target(1));
assert_eq!(t.take_expired(Ticks::from_raw(20)), None);
t.clear(pid(2));
assert_eq!(t.earliest(), None);
assert!(!t.set(pid(500), Ticks::from_raw(1), target(0)));
}