1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#![feature(box_syntax)] mod context; mod messages; mod process; mod runnable; pub use process::spawn; #[cfg(test)] mod tests { use super::*; #[test] fn test() { enum MyMessages { Increment(u32), PrintValue, } let process = spawn(|context: context::Context<MyMessages>| { let mut state = 0; loop { match context.receive() { Ok(MyMessages::Increment(i)) => state += i, Ok(MyMessages::PrintValue) => println!("State = {}", state), Err(error) => panic!("Failed to receive {:?}", error), } } }); assert!(process.send(MyMessages::Increment(1)).is_ok()); assert!(process.send(MyMessages::Increment(7)).is_ok()); assert!(process.send(MyMessages::PrintValue).is_ok()); assert!(process.kill().is_ok()); assert!(process.send(MyMessages::PrintValue).is_err()); } }