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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#![feature(linked_list_cursors)]
mod looper;
mod handler;
pub use looper::{Looper, LooperMsg};
#[cfg(test)]
mod tests {
use super::{Looper, LooperMsg};
static mut CNT: i32 = 0;
static mut VAL: Vec<i32> = Vec::new();
struct ExMsg { val: i32 }
impl LooperMsg for ExMsg {
fn handle_message(self) {
println!("msg val: {}", self.val);
unsafe {
CNT += 1;
VAL.push(self.val);
}
}
}
#[test]
fn it_works() {
let mut lp = Looper::new();
lp.send_msg_delay(ExMsg {val: 4}, std::time::Duration::from_millis(400));
lp.send_msg_delay(ExMsg {val: 2}, std::time::Duration::from_millis(800));
lp.send_msg_delay(ExMsg {val: 3}, std::time::Duration::from_millis(600));
lp.send_msg_delay(ExMsg {val: 1}, std::time::Duration::from_millis(1000));
lp.send_msg_delay(ExMsg {val: 5}, std::time::Duration::from_millis(200));
std::thread::sleep(std::time::Duration::from_secs(2));
lp.terminate();
unsafe {
assert_eq!(CNT, 5);
assert_eq!(VAL, vec![5, 4, 3, 2, 1]);
}
}
}