use super::*; use types::badge::Badge; use types::generation::Generation; use types::id::{IrqId, NotificationId}; fn route(n: u16) -> IrqRoute { IrqRoute { notification: NotificationId::from_raw(n), generation: Generation::initial(), badge: Badge::new(1 << n), owner: types::id::ProcessId::from_raw(0), } } #[test] fn new_table_routes_nothing() { let t = IrqRoutingTable::new(); assert_eq!(t.route(IrqId::from_raw(10)), None); } #[test] fn set_then_route() { let mut t = IrqRoutingTable::new(); assert!(t.set(IrqId::from_raw(10), route(3))); assert_eq!(t.route(IrqId::from_raw(10)), Some(route(3))); } #[test] fn set_replaces_and_clear_removes() { let mut t = IrqRoutingTable::new(); t.set(IrqId::from_raw(10), route(3)); t.set(IrqId::from_raw(10), route(4)); assert_eq!(t.route(IrqId::from_raw(10)), Some(route(4))); t.clear(IrqId::from_raw(10)); assert_eq!(t.route(IrqId::from_raw(10)), None); } #[test] fn lines_beyond_the_table_are_rejected_without_panicking() { let mut t = IrqRoutingTable::new(); assert!(!t.set(IrqId::from_raw(1000), route(1))); assert_eq!(t.route(IrqId::from_raw(1000)), None); t.clear(IrqId::from_raw(1000)); }