Files
k-os/crates/domain/src/irq/tests.rs

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));
}