Sha256: 79330465a5d8f2d6e450861e7ca2ed8ae7fe78a5fb221b6ab7121227810c1bcf

Contents?: true

Size: 1.54 KB

Versions: 27

Compression:

Stored size: 1.54 KB

Contents

#![feature(test)]

extern crate test;
use crate::test::Bencher;

use futures::channel::oneshot;
use futures::executor::block_on;
use futures::future;
use futures::stream::{self, StreamExt};
use futures::task::Poll;
use futures_util::FutureExt;
use std::collections::VecDeque;
use std::thread;

#[bench]
fn oneshot_streams(b: &mut Bencher) {
    const STREAM_COUNT: usize = 10_000;
    const STREAM_ITEM_COUNT: usize = 1;

    b.iter(|| {
        let mut txs = VecDeque::with_capacity(STREAM_COUNT);
        let mut rxs = Vec::new();

        for _ in 0..STREAM_COUNT {
            let (tx, rx) = oneshot::channel();
            txs.push_back(tx);
            rxs.push(rx);
        }

        thread::spawn(move || {
            let mut last = 1;
            while let Some(tx) = txs.pop_front() {
                let _ = tx.send(stream::iter(last..last + STREAM_ITEM_COUNT));
                last += STREAM_ITEM_COUNT;
            }
        });

        let mut flatten = stream::iter(rxs)
            .map(|recv| recv.into_stream().map(|val| val.unwrap()).flatten())
            .flatten_unordered(None);

        block_on(future::poll_fn(move |cx| {
            let mut count = 0;
            loop {
                match flatten.poll_next_unpin(cx) {
                    Poll::Ready(None) => break,
                    Poll::Ready(Some(_)) => {
                        count += 1;
                    }
                    _ => {}
                }
            }
            assert_eq!(count, STREAM_COUNT * STREAM_ITEM_COUNT);

            Poll::Ready(())
        }))
    });
}

Version data entries

27 entries across 27 versions & 1 rubygems

Version Path
wasmtime-30.0.2 ./ext/cargo-vendor/futures-util-0.3.31/benches/flatten_unordered.rs
wasmtime-29.0.0 ./ext/cargo-vendor/futures-util-0.3.31/benches/flatten_unordered.rs
wasmtime-28.0.0 ./ext/cargo-vendor/futures-util-0.3.31/benches/flatten_unordered.rs
wasmtime-27.0.0 ./ext/cargo-vendor/futures-util-0.3.31/benches/flatten_unordered.rs
wasmtime-26.0.0 ./ext/cargo-vendor/futures-util-0.3.31/benches/flatten_unordered.rs
wasmtime-25.0.2 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-25.0.1 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-25.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-24.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-23.0.2 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-22.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-21.0.1 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-20.0.2 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-20.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-18.0.3 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-17.0.1 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-17.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-16.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-15.0.1 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs
wasmtime-15.0.0 ./ext/cargo-vendor/futures-util-0.3.30/benches/flatten_unordered.rs