use super::KeyedHashedWheelTimer;
#[test]
fn schedule_replaces_existing_event_with_same_key() {
let mut wheel = KeyedHashedWheelTimer::new(8, |value: &u32| *value);
let first = wheel.schedule(5, 10);
let second = wheel.schedule(7, 10);
assert_eq!(first.id, 1);
assert_eq!(second.id, 2);
assert_eq!(second.replaced_id, Some(1));
assert!(!wheel.contains_by_id(1));
assert_eq!(wheel.id_by_key(&10), Some(2));
assert_eq!(wheel.count_all(), 1);
}
#[test]
fn update_by_key_changes_identity_and_removes_old_key() {
let mut wheel = KeyedHashedWheelTimer::new(8, |value: &u32| *value);
let created = wheel.schedule(1, 10);
let updated = wheel
.update_by_key(&10, 2, 20)
.expect("keyed event should exist");
assert_eq!(updated.id, created.id);
assert!(!wheel.contains_by_key(&10));
assert!(wheel.contains_by_key(&20));
assert_eq!(wheel.id_by_key(&20), Some(created.id));
}
#[test]
fn pop_events_cleans_key_index() {
let mut wheel = KeyedHashedWheelTimer::new(4, |value: &u32| *value);
let created = wheel.schedule(0, 10);
assert_eq!(wheel.id_by_key(&10), Some(created.id));
let popped = wheel.pop_events();
assert_eq!(popped.len(), 1);
assert!(!wheel.contains_by_key(&10));
}