+
+#[test]
+fn test_broadcast_future() {
+ use std::sync::atomic::{AtomicUsize, Ordering};
+
+ static CHECKSUM: AtomicUsize = AtomicUsize::new(0);
+
+ let (sender, trigger) = BroadcastFuture::new_oneshot();
+
+ let receiver1 = sender.listen()
+ .and_then(|res| {
+ CHECKSUM.fetch_add(res, Ordering::SeqCst);
+ Ok(())
+ })
+ .map_err(|err| { panic!("got errror {}", err); });
+
+ let receiver2 = sender.listen()
+ .and_then(|res| {
+ CHECKSUM.fetch_add(res*2, Ordering::SeqCst);
+ Ok(())
+ })
+ .map_err(|err| { panic!("got errror {}", err); });
+
+ tokio::run(futures::future::lazy(move || {
+
+ tokio::spawn(receiver1);
+ tokio::spawn(receiver2);
+
+ trigger.send(Ok(1)).unwrap();
+
+ Ok(())
+ }));
+
+ let result = CHECKSUM.load(Ordering::SeqCst);
+
+ assert!(result == 3);
+}