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