parent
470d5692fe
commit
8d304da4b4
@ -0,0 +1,53 @@
|
|||||||
|
use super::Swapper;
|
||||||
|
use alloc::btree_map::BTreeMap;
|
||||||
|
|
||||||
|
pub struct MockSwapper {
|
||||||
|
map: BTreeMap<usize, [u8; 4096]>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Swapper for MockSwapper {
|
||||||
|
fn swap_out(&mut self, data: &[u8; 4096]) -> usize {
|
||||||
|
let id = self.alloc_id();
|
||||||
|
self.map.insert(id, data.clone());
|
||||||
|
id
|
||||||
|
}
|
||||||
|
|
||||||
|
fn swap_in(&mut self, token: usize, data: &mut [u8; 4096]) {
|
||||||
|
*data = self.map.remove(&token).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MockSwapper {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
MockSwapper {map: BTreeMap::new()}
|
||||||
|
}
|
||||||
|
fn alloc_id(&self) -> usize {
|
||||||
|
(0 .. 100usize).find(|i| !self.map.contains_key(i)).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod test {
|
||||||
|
use super::*;
|
||||||
|
use core::mem::uninitialized;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test() {
|
||||||
|
let mut swapper = MockSwapper::new();
|
||||||
|
let data: [u8; 4096] = unsafe{ uninitialized() };
|
||||||
|
let mut data1: [u8; 4096] = unsafe{ uninitialized() };
|
||||||
|
let token = swapper.swap_out(&data);
|
||||||
|
swapper.swap_in(token, &mut data1);
|
||||||
|
for (&a, &b) in data.iter().zip(data1.iter()) {
|
||||||
|
assert_eq!(a, b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
#[should_panic]
|
||||||
|
fn invalid_token() {
|
||||||
|
let mut swapper = MockSwapper::new();
|
||||||
|
let mut data: [u8; 4096] = unsafe{ uninitialized() };
|
||||||
|
swapper.swap_in(0, &mut data);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue