Skip to content

Commit

Permalink
Merge pull request #35 from kpp/fix_benches
Browse files Browse the repository at this point in the history
Fix benches: actually poll futures in benches
  • Loading branch information
kpp authored Dec 5, 2020
2 parents 0c58293 + a95897c commit 2ec9d2d
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 92 deletions.
78 changes: 42 additions & 36 deletions benches/future.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,22 +2,24 @@ use criterion::*;
use futures::executor;

fn bench_ready(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("future::ready");
let mut group = c.benchmark_group("future::ready");

group.bench_function("futures", |b| {
b.iter(move || async {
black_box(futures::future::ready(42)).await
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
black_box(futures::future::ready(42).await);
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
black_box(futures_async_combinators::future::ready(42)).await
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
black_box(futures_async_combinators::future::ready(42).await);
})
});

group.finish();
})
});

group.finish();
}

fn bench_poll_fn(c: &mut Criterion) {
Expand All @@ -27,47 +29,51 @@ fn bench_poll_fn(c: &mut Criterion) {
Poll::Ready(42)
}

executor::block_on(async {
let mut group = c.benchmark_group("future::poll_fn");
let mut group = c.benchmark_group("future::poll_fn");

group.bench_function("futures", |b| {
b.iter(move || async {
black_box(futures::future::poll_fn(ret_42)).await
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
black_box(futures::future::poll_fn(ret_42).await);
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
black_box(futures_async_combinators::future::poll_fn(ret_42)).await
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
black_box(futures_async_combinators::future::poll_fn(ret_42)).await;
})
});

group.finish();
})
});

group.finish();
}

fn bench_map(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("future::map");
let mut group = c.benchmark_group("future::map");

group.bench_function("futures", |b| {
b.iter(move || async {
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
use futures::future::*;
let fut = ready(40);
let fut = fut.map(|x| x + 2);
black_box(fut).await
black_box(fut.await);
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
use futures_async_combinators::future::*;
let fut = ready(40);
let fut = map(fut, |x| x + 2);
black_box(fut).await
black_box(fut.await);
})
});

group.finish();
})
});

group.finish();
}

criterion_group!(benches, bench_ready, bench_poll_fn, bench_map);
Expand Down
122 changes: 66 additions & 56 deletions benches/stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,141 +2,151 @@ use criterion::*;
use futures::executor;

fn bench_stream_iter(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("stream::iter");
let mut group = c.benchmark_group("stream::iter");

group.bench_function("futures", |b| {
b.iter(move || async {
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::{iter, StreamExt};
let mut stream = iter(1..=1000);
while let Some(item) = stream.next().await {
black_box(item);
}
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::StreamExt;
use futures_async_combinators::stream::iter;
let mut stream = iter(1..=1000);
while let Some(item) = stream.next().await {
black_box(item);
}
})
});

group.finish();
})
});

group.finish();
}

fn bench_stream_next(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("stream::next");
let mut group = c.benchmark_group("stream::next");

group.bench_function("futures", |b| {
b.iter(move || async {
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::{iter, StreamExt};
let mut stream = iter(1..=1000);
while let Some(item) = stream.next().await {
black_box(item);
}
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::iter;
use futures_async_combinators::stream::next;
let mut stream = iter(1..=1000);
while let Some(item) = next(&mut stream).await {
black_box(item);
}
})
});

group.finish();
})
});

group.finish();
}

fn bench_stream_collect(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("stream::collect");
let mut group = c.benchmark_group("stream::collect");

group.bench_function("futures", |b| {
b.iter(move || async {
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::{iter, StreamExt};
let stream = iter(1..=1000);
let vec: Vec<_> = stream.collect().await;
black_box(vec)
black_box(vec);
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::iter;
use futures_async_combinators::stream::collect;
let stream = iter(1..=1000);
let vec: Vec<_> = collect(stream).await;
black_box(vec)
black_box(vec);
})
});

group.finish();
})
});

group.finish();
}

fn bench_stream_map(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("stream::map");
let mut group = c.benchmark_group("stream::map");

group.bench_function("futures", |b| {
b.iter(move || async {
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::{iter, StreamExt};
let stream = iter(1..=1000);
let stream = stream.map(|x| x + 42);
let vec: Vec<_> = stream.collect().await;
black_box(vec)
black_box(vec);
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::{iter, StreamExt};
use futures_async_combinators::stream::map;
let stream = iter(1..=1000);
let stream = map(stream, |x| x + 42);
let vec: Vec<_> = stream.collect().await;
black_box(vec)
black_box(vec);
})
});

group.finish();
})
});

group.finish();
}

fn bench_stream_fold(c: &mut Criterion) {
executor::block_on(async {
let mut group = c.benchmark_group("stream::fold");
let mut group = c.benchmark_group("stream::fold");

group.bench_function("futures", |b| {
b.iter(move || async {
group.bench_function("futures", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::{iter, StreamExt};
use futures_async_combinators::future::ready;
let stream = iter(1..=1000);
let acc = stream.fold(0, |acc, x| ready(acc + x));
black_box(acc).await
black_box(acc).await;
})
});
group.bench_function("async_combinators", |b| {
b.iter(move || async {
})
});
group.bench_function("async_combinators", |b| {
b.iter(|| {
executor::block_on(async {
use futures::stream::iter;
use futures_async_combinators::future::ready;
use futures_async_combinators::stream::fold;
let stream = iter(1..=1000);
let acc = fold(stream, 0, |acc, x| ready(acc + x));
black_box(acc).await
black_box(acc).await;
})
});

group.finish();
})
});

group.finish();
}

criterion_group!(
Expand Down

0 comments on commit 2ec9d2d

Please sign in to comment.