| //! Tests for iteration over receivers. | 
 |  | 
 | use crossbeam_channel::unbounded; | 
 | use crossbeam_utils::thread::scope; | 
 |  | 
 | #[test] | 
 | fn nested_recv_iter() { | 
 |     let (s, r) = unbounded::<i32>(); | 
 |     let (total_s, total_r) = unbounded::<i32>(); | 
 |  | 
 |     scope(|scope| { | 
 |         scope.spawn(move |_| { | 
 |             let mut acc = 0; | 
 |             for x in r.iter() { | 
 |                 acc += x; | 
 |             } | 
 |             total_s.send(acc).unwrap(); | 
 |         }); | 
 |  | 
 |         s.send(3).unwrap(); | 
 |         s.send(1).unwrap(); | 
 |         s.send(2).unwrap(); | 
 |         drop(s); | 
 |         assert_eq!(total_r.recv().unwrap(), 6); | 
 |     }) | 
 |     .unwrap(); | 
 | } | 
 |  | 
 | #[test] | 
 | fn recv_iter_break() { | 
 |     let (s, r) = unbounded::<i32>(); | 
 |     let (count_s, count_r) = unbounded(); | 
 |  | 
 |     scope(|scope| { | 
 |         scope.spawn(move |_| { | 
 |             let mut count = 0; | 
 |             for x in r.iter() { | 
 |                 if count >= 3 { | 
 |                     break; | 
 |                 } else { | 
 |                     count += x; | 
 |                 } | 
 |             } | 
 |             count_s.send(count).unwrap(); | 
 |         }); | 
 |  | 
 |         s.send(2).unwrap(); | 
 |         s.send(2).unwrap(); | 
 |         s.send(2).unwrap(); | 
 |         let _ = s.send(2); | 
 |         drop(s); | 
 |         assert_eq!(count_r.recv().unwrap(), 4); | 
 |     }) | 
 |     .unwrap(); | 
 | } | 
 |  | 
 | #[test] | 
 | fn recv_try_iter() { | 
 |     let (request_s, request_r) = unbounded(); | 
 |     let (response_s, response_r) = unbounded(); | 
 |  | 
 |     scope(|scope| { | 
 |         scope.spawn(move |_| { | 
 |             let mut count = 0; | 
 |             loop { | 
 |                 for x in response_r.try_iter() { | 
 |                     count += x; | 
 |                     if count == 6 { | 
 |                         return; | 
 |                     } | 
 |                 } | 
 |                 request_s.send(()).unwrap(); | 
 |             } | 
 |         }); | 
 |  | 
 |         for _ in request_r.iter() { | 
 |             if response_s.send(2).is_err() { | 
 |                 break; | 
 |             } | 
 |         } | 
 |     }) | 
 |     .unwrap(); | 
 | } | 
 |  | 
 | #[test] | 
 | fn recv_into_iter_owned() { | 
 |     let mut iter = { | 
 |         let (s, r) = unbounded::<i32>(); | 
 |         s.send(1).unwrap(); | 
 |         s.send(2).unwrap(); | 
 |         r.into_iter() | 
 |     }; | 
 |  | 
 |     assert_eq!(iter.next().unwrap(), 1); | 
 |     assert_eq!(iter.next().unwrap(), 2); | 
 |     assert!(iter.next().is_none()); | 
 | } | 
 |  | 
 | #[test] | 
 | fn recv_into_iter_borrowed() { | 
 |     let (s, r) = unbounded::<i32>(); | 
 |     s.send(1).unwrap(); | 
 |     s.send(2).unwrap(); | 
 |     drop(s); | 
 |  | 
 |     let mut iter = (&r).into_iter(); | 
 |     assert_eq!(iter.next().unwrap(), 1); | 
 |     assert_eq!(iter.next().unwrap(), 2); | 
 |     assert!(iter.next().is_none()); | 
 | } |