Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #[cfg(test)]
- fn fail<T> (_: T)
- {
- panic!()
- }
- #[test]
- fn test_async ()
- {
- use ::std::{
- sync::Arc,
- };
- use ::crossbeam::atomic::AtomicCell;
- use ::tokio::{
- prelude::*,
- runtime::Runtime,
- sync::mpsc,
- };
- let mut rt = Runtime::new().unwrap();
- let counter = Arc::new(AtomicCell::new(0_u32));
- let (chan_tx, chan_rx) = mpsc::channel(64);
- let mut stream = chan_rx
- .map({
- let counter = Arc::clone(&counter);
- move |val| {
- if val % 2 == 1 { // only allow odd numbers
- counter.fetch_add(1);
- }
- }
- })
- .map_err(fail)
- .wait();
- rt.spawn(chan_tx.clone().send(1).map(drop).map_err(fail));
- let _ = stream.next();
- assert_eq!(counter.load(), 1);
- rt.spawn(chan_tx.clone().send(2).map(drop).map_err(fail));
- let _ = stream.next();
- assert_eq!(counter.load(), 1);
- rt.spawn(chan_tx.send(3).map(drop).map_err(fail));
- let _ = stream.next();
- assert_eq!(counter.load(), 2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement