| 1 | #![feature (test)] |
| 2 | |
| 3 | extern crate test; |
| 4 | use crate::test::Bencher; |
| 5 | |
| 6 | use futures::executor::block_on; |
| 7 | use futures::stream::{repeat, select, StreamExt}; |
| 8 | |
| 9 | #[bench] |
| 10 | fn select_streams(b: &mut Bencher) { |
| 11 | const STREAM_COUNT: usize = 10_000; |
| 12 | |
| 13 | b.iter(|| { |
| 14 | let stream1 = repeat(1).take(STREAM_COUNT); |
| 15 | let stream2 = repeat(2).take(STREAM_COUNT); |
| 16 | let stream3 = repeat(3).take(STREAM_COUNT); |
| 17 | let stream4 = repeat(4).take(STREAM_COUNT); |
| 18 | let stream5 = repeat(5).take(STREAM_COUNT); |
| 19 | let stream6 = repeat(6).take(STREAM_COUNT); |
| 20 | let stream7 = repeat(7).take(STREAM_COUNT); |
| 21 | let count = block_on(async { |
| 22 | let count = select( |
| 23 | stream1, |
| 24 | select( |
| 25 | stream2, |
| 26 | select(stream3, select(stream4, select(stream5, select(stream6, stream7)))), |
| 27 | ), |
| 28 | ) |
| 29 | .count() |
| 30 | .await; |
| 31 | count |
| 32 | }); |
| 33 | assert_eq!(count, STREAM_COUNT * 7); |
| 34 | }); |
| 35 | } |
| 36 | |