async-gen 0.3.0

Async generator in stable rust using async/await
Documentation
mod utils;

use criterion::{criterion_group, criterion_main, Criterion};
use futures::StreamExt;
use std::pin::pin;

const ITER: usize = 10000;

async fn async_gen_sum(iter: usize) -> usize {
    let mut gen = pin!(async_gen::stream! {
        for i in 1..=iter {
            yield i;
        }
    });
    let mut i = 0;
    while let Some(v) = gen.next().await {
        i += v;
    }
    i
}

async fn async_stream_sum(iter: usize) -> usize {
    let mut gen = pin!(async_stream::stream! {
        for i in 1..=iter {
            yield i;
        }
    });
    let mut i = 0;
    while let Some(v) = gen.next().await {
        i += v;
    }
    i
}

pub fn simple_benchmark(c: &mut Criterion) {
    c.bench_function("async_gen", |b| {
        b.iter(|| utils::poll_once(async_gen_sum(ITER)))
    });
    c.bench_function("async_stream", |b| {
        b.iter(|| utils::poll_once(async_stream_sum(ITER)))
    });
}
criterion_group!(benches, simple_benchmark);
criterion_main!(benches);