1use std::thread::sleep;
2use std::time::Duration;
3use std::u32;
4
5use crossbeam_utils::sync::Parker;
6use crossbeam_utils::thread;
7
8#[test]
9fn park_timeout_unpark_before() {
10 let p = Parker::new();
11 for _ in 0..10 {
12 p.unparker().unpark();
13 p.park_timeout(Duration::from_millis(u32::MAX as u64));
14 }
15}
16
17#[test]
18fn park_timeout_unpark_not_called() {
19 let p = Parker::new();
20 for _ in 0..10 {
21 p.park_timeout(Duration::from_millis(10))
22 }
23}
24
25#[test]
26fn park_timeout_unpark_called_other_thread() {
27 for _ in 0..10 {
28 let p = Parker::new();
29 let u = p.unparker().clone();
30
31 thread::scope(|scope| {
32 scope.spawn(move |_| {
33 sleep(Duration::from_millis(50));
34 u.unpark();
35 });
36
37 p.park_timeout(Duration::from_millis(u32::MAX as u64))
38 })
39 .unwrap();
40 }
41}
42