test(client): add benchmarks for new cancelable queue
This commit is contained in:
@@ -65,9 +65,64 @@ impl<T, U> Stream for Receiver<T, U> {
|
||||
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::<i32, ()>();
|
||||
|
||||
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::<i32, ()>();
|
||||
|
||||
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::<i32, ()>();
|
||||
|
||||
b.iter(move || {
|
||||
tx.cancel();
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,4 +2,5 @@ pub use self::str::ByteStr;
|
||||
|
||||
mod str;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum Never {}
|
||||
|
||||
Reference in New Issue
Block a user