| use std::thread::sleep; |
| use std::time::Duration; |
| use std::u32; |
| |
| use crossbeam_utils::sync::Parker; |
| use crossbeam_utils::thread; |
| |
| #[test] |
| fn park_timeout_unpark_before() { |
| let p = Parker::new(); |
| for _ in 0..10 { |
| p.unparker().unpark(); |
| p.park_timeout(Duration::from_millis(u32::MAX as u64)); |
| } |
| } |
| |
| #[test] |
| fn park_timeout_unpark_not_called() { |
| let p = Parker::new(); |
| for _ in 0..10 { |
| p.park_timeout(Duration::from_millis(10)) |
| } |
| } |
| |
| #[test] |
| fn park_timeout_unpark_called_other_thread() { |
| for _ in 0..10 { |
| let p = Parker::new(); |
| let u = p.unparker().clone(); |
| |
| thread::scope(|scope| { |
| scope.spawn(move |_| { |
| sleep(Duration::from_millis(50)); |
| u.unpark(); |
| }); |
| |
| p.park_timeout(Duration::from_millis(u32::MAX as u64)) |
| }) |
| .unwrap(); |
| } |
| } |