| 1 | use std::thread::sleep; |
| 2 | use std::time::Duration; |
| 3 | use std::u32; |
| 4 | |
| 5 | use crossbeam_utils::sync::Parker; |
| 6 | use crossbeam_utils::thread; |
| 7 | |
| 8 | #[test] |
| 9 | fn 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] |
| 18 | fn 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] |
| 26 | fn 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 | |