blob: 5cbc38db2c36241ea88d2b3a507c369545196b03 [file] [log] [blame]
use super::page_table;
#[test]
fn test_read_write() {
let mut pt = page_table::PageTable::new();
assert_eq!(pt.write_u64(0x00100000, 42), false);
assert_eq!(pt.write_u64(0x00200000, 192), false);
assert_eq!(pt.virtual_alloc(0x00100000), true);
assert_eq!(pt.write_u64(0x00100000, 42), true);
assert_eq!(pt.write_u64(0x00200000, 192), false);
assert_eq!(pt.write_u64(0x00100008, 7889315787603), true);
assert_eq!(pt.read_u64(0x00100000), Some(42));
assert_eq!(pt.read_u64(0x00100008), Some(7889315787603));
assert_eq!(pt.read_u64(0x001ffff8), Some(0));
assert_eq!(pt.read_u64(0x001ffff9), None);
assert_eq!(pt.virtual_alloc(0x00200000), true);
assert_eq!(pt.write_u64(0x00200000, 192), true);
assert_eq!(pt.read_u64(0x00100000), Some(42));
assert_eq!(pt.read_u64(0x00200000), Some(192));
}
#[test]
fn test_types() {
let mut pt = page_table::PageTable::new();
assert_eq!(pt.virtual_alloc(0x0), true);
assert_eq!(pt.write_u8(0x0, 42), true);
assert_eq!(pt.read_u8(0x0), Some(42));
assert_eq!(pt.write_i8(0x0, -1), true);
assert_eq!(pt.read_i8(0x0), Some(-1));
assert_eq!(pt.write_u16(0x0, 12345), true);
assert_eq!(pt.read_u16(0x0), Some(12345));
assert_eq!(pt.write_i16(0x0, -12345), true);
assert_eq!(pt.read_i16(0x0), Some(-12345));
assert_eq!(pt.write_u32(0x0, 99200), true);
assert_eq!(pt.read_u32(0x0), Some(99200));
assert_eq!(pt.write_i32(0x0, -99200), true);
assert_eq!(pt.read_i32(0x0), Some(-99200));
assert_eq!(pt.write_u64(0x0, 7889315787603), true);
assert_eq!(pt.read_u64(0x0), Some(7889315787603));
assert_eq!(pt.write_i64(0x0, -7889315787603), true);
assert_eq!(pt.read_i64(0x0), Some(-7889315787603));
assert_eq!(pt.write_f64(0x0, 0.267207909), true);
assert!((pt.read_f64(0x0).unwrap() - 0.267207909).abs() < 1e-12);
}
#[test]
fn test_concurrent() {
use std::thread;
let pt = page_table::PageTable::new();
let handles = (0..128).map(|id| {
let mut pt = pt.clone();
thread::spawn(move || {
let base: u64 = 0x00100000 * (id as u64);
assert_eq!(pt.virtual_alloc(base), true);
for i in 0..1000 {
assert_eq!(pt.write_u64(base + (i as u64) * 8, i), true);
}
for i in 0..1000 {
assert_eq!(pt.read_u64(base + (i as u64) * 8), Some(i));
}
})
});
for handle in handles {
handle.join().unwrap();
}
}