45 lines
1.2 KiB
Rust
45 lines
1.2 KiB
Rust
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));
|
|
}
|