use futures::stream::StreamExt;
use par_stream::ParStreamExt;
async fn main_async() {
let scale = Box::new(2usize);
let addition = Box::new(1usize);
let doubled = futures::stream::iter(0..1000)
.wrapping_enumerate()
.par_then_unordered(None, move |(index, value)| {
let cloned = *scale;
async move { (index, value * cloned) }
})
.par_map_unordered(None, move |(index, value)| {
let cloned = *addition;
move || (index, value + cloned)
})
.reorder_enumerated()
.collect::<Vec<_>>()
.await;
let expect = (0..1000).map(|value| value * 2 + 1).collect::<Vec<_>>();
assert_eq!(doubled, expect);
}
#[cfg(feature = "runtime_async-std")]
#[async_std::main]
async fn main() {
main_async().await
}
#[cfg(feature = "runtime_tokio")]
#[tokio::main]
async fn main() {
main_async().await
}