use flo_stream::*;
use futures::prelude::*;
use futures::executor;
use futures::channel::mpsc;
#[test]
fn number_generator() {
executor::block_on(async {
let mut generated_stream = generator_stream(move |yield_value| async move {
for num in 0u32..3 {
yield_value(num).await;
}
});
assert!(generated_stream.next().await == Some(0));
assert!(generated_stream.next().await == Some(1));
assert!(generated_stream.next().await == Some(2));
assert!(generated_stream.next().await == None);
})
}
#[test]
fn add_one_generator() {
executor::block_on(async {
let (mut numbers_in, mut numbers_out) = mpsc::channel(20);
let mut generated_stream = generator_stream(move |yield_value| async move {
for _ in 0u32..3 {
let next_number: Option<i32> = numbers_out.next().await;
if let Some(next_number) = next_number {
yield_value(next_number + 3).await;
} else {
break;
}
}
});
numbers_in.send(1).await.unwrap();
assert!(generated_stream.next().await == Some(4));
numbers_in.send(5).await.unwrap();
assert!(generated_stream.next().await == Some(8));
numbers_in.send(39).await.unwrap();
assert!(generated_stream.next().await == Some(42));
assert!(generated_stream.next().await == None);
})
}