Advertisement
Guest User

Untitled

a guest
Jul 23rd, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. #[cfg(test)]
  2. fn fail<T> (_: T)
  3. {
  4. panic!()
  5. }
  6.  
  7. #[test]
  8. fn test_async ()
  9. {
  10. use ::std::{
  11. sync::Arc,
  12. };
  13. use ::crossbeam::atomic::AtomicCell;
  14. use ::tokio::{
  15. prelude::*,
  16. runtime::Runtime,
  17. sync::mpsc,
  18. };
  19.  
  20. let mut rt = Runtime::new().unwrap();
  21.  
  22. let counter = Arc::new(AtomicCell::new(0_u32));
  23. let (chan_tx, chan_rx) = mpsc::channel(64);
  24.  
  25. let mut stream = chan_rx
  26. .map({
  27. let counter = Arc::clone(&counter);
  28. move |val| {
  29. if val % 2 == 1 { // only allow odd numbers
  30. counter.fetch_add(1);
  31. }
  32. }
  33. })
  34. .map_err(fail)
  35. .wait();
  36.  
  37. rt.spawn(chan_tx.clone().send(1).map(drop).map_err(fail));
  38.  
  39. let _ = stream.next();
  40. assert_eq!(counter.load(), 1);
  41.  
  42. rt.spawn(chan_tx.clone().send(2).map(drop).map_err(fail));
  43.  
  44. let _ = stream.next();
  45. assert_eq!(counter.load(), 1);
  46.  
  47. rt.spawn(chan_tx.send(3).map(drop).map_err(fail));
  48.  
  49. let _ = stream.next();
  50. assert_eq!(counter.load(), 2);
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement