#[cfg(feature = "persistance")]
mod persist {
use microkelvin::{
BackendCtor, Compound, DiskBackend, PersistError, Persistance,
};
use nstack::NStack;
#[test]
fn persist_across_threads() -> Result<(), PersistError> {
let n: u64 = 1024;
let mut stack = NStack::<u64, ()>::new();
for i in 0..n {
stack.push(i)?;
}
let backend = BackendCtor::new(|| DiskBackend::ephemeral());
let persisted = Persistance::persist(&backend, &stack)?;
std::thread::spawn(move || {
let restored_generic = persisted.restore()?;
let mut restored: NStack<u64, ()> =
NStack::from_generic(&restored_generic)?;
for i in 0..n {
assert_eq!(restored.pop()?, Some(n - i - 1));
}
Ok(()) as Result<(), PersistError>
})
.join()
.expect("thread to join cleanly")?;
for i in 0..n {
assert_eq!(stack.pop()?, Some(n - i - 1));
}
Ok(())
}
}