transform-stream 0.3.1

Lightweight async stream wrapper
Documentation
use transform_stream::stream;

use futures_core::FusedStream;
use futures_executor::block_on;
use futures_util::{pin_mut, StreamExt};

#[allow(clippy::never_loop)]
#[test]
fn nop() {
    block_on(async {
        let s = stream! {};
        pin_mut!(s);
        while let Some(()) = s.next().await {
            unreachable!()
        }
    });

    block_on(async {
        let mut flag = false;
        {
            let s = {
                let flag = &mut flag;
                stream! {
                    *flag=true;
                }
            };
            pin_mut!(s);
            while let Some(()) = s.next().await {
                unreachable!()
            }
        }
        assert!(flag);
    })
}

#[test]
fn single() {
    block_on(async {
        let s = stream! {
            yield_!("hello");
        };
        pin_mut!(s);
        assert!(!s.is_terminated());
        assert_eq!(s.next().await, Some("hello"));
        assert_eq!(s.next().await, None);
        assert!(s.is_terminated());
        assert_eq!(s.next().await, None);
    })
}

#[test]
fn infinity() {
    let stream = stream! {
        for i in 0_i32.. {
            yield_!(i);
        }
    };

    block_on(async move {
        pin_mut!(stream);

        assert_eq!(stream.next().await.unwrap(), 0);
        assert_eq!(stream.next().await.unwrap(), 1);
        assert_eq!(stream.next().await.unwrap(), 2);

        assert!(!stream.is_terminated());
    })
}