#![feature(test)] extern crate test; use crate::test::Bencher; use futures::executor::block_on; use futures::stream::{repeat, select, StreamExt}; #[bench] fn select_streams(b: &mut Bencher) { const STREAM_COUNT: usize = 10_000; b.iter(|| { let stream1 = repeat(1).take(STREAM_COUNT); let stream2 = repeat(2).take(STREAM_COUNT); let stream3 = repeat(3).take(STREAM_COUNT); let stream4 = repeat(4).take(STREAM_COUNT); let stream5 = repeat(5).take(STREAM_COUNT); let stream6 = repeat(6).take(STREAM_COUNT); let stream7 = repeat(7).take(STREAM_COUNT); let count = block_on(async { let count = select( stream1, select( stream2, select(stream3, select(stream4, select(stream5, select(stream6, stream7)))), ), ) .count() .await; count }); assert_eq!(count, STREAM_COUNT * 7); }); }