From 648548cfa3051f4507a9932cdd55f3496cef8c44 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Tue, 6 Feb 2018 12:31:31 -0800 Subject: [PATCH] test(client): add benchmarks for new cancelable queue --- src/client/dispatch.rs | 59 ++++++++++++++++++++++++++++++++++++++++-- src/common/mod.rs | 1 + 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs index 8e74872c..c34665cf 100644 --- a/src/client/dispatch.rs +++ b/src/client/dispatch.rs @@ -65,9 +65,64 @@ impl Stream for Receiver { if let Async::Ready(()) = self.canceled.poll()? { return Ok(Async::Ready(None)); } - self.inner.poll() - .map_err(|()| unreachable!("mpsc never errors")) + self.inner.poll().map_err(|()| unreachable!("mpsc never errors")) } } //TODO: Drop for Receiver should consume inner + +#[cfg(test)] +mod tests { + + #[cfg(feature = "nightly")] + extern crate test; + + #[cfg(feature = "nightly")] + use futures::{Future, Stream}; + + #[cfg(feature = "nightly")] + #[bench] + fn cancelable_queue_throughput(b: &mut test::Bencher) { + + let (tx, mut rx) = super::channel::(); + + b.iter(move || { + ::futures::future::lazy(|| { + let _ = tx.send(1).unwrap(); + loop { + let async = rx.poll().unwrap(); + if async.is_not_ready() { + break; + } + } + + + Ok::<(), ()>(()) + }).wait().unwrap(); + }) + } + + #[cfg(feature = "nightly")] + #[bench] + fn cancelable_queue_not_ready(b: &mut test::Bencher) { + let (_tx, mut rx) = super::channel::(); + + b.iter(move || { + ::futures::future::lazy(|| { + assert!(rx.poll().unwrap().is_not_ready()); + + Ok::<(), ()>(()) + }).wait().unwrap(); + }) + } + + #[cfg(feature = "nightly")] + #[bench] + fn cancelable_queue_cancel(b: &mut test::Bencher) { + let (tx, _rx) = super::channel::(); + + b.iter(move || { + tx.cancel(); + }) + } +} diff --git a/src/common/mod.rs b/src/common/mod.rs index 93363c3f..bc2304bb 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -2,4 +2,5 @@ pub use self::str::ByteStr; mod str; +#[derive(Debug)] pub enum Never {}