clone-stream 0.4.1

Turn any Stream into a cloneable stream where each clone receives all items independently.
Documentation
use std::future::ready;

use clone_stream::ForkStream;
use futures::{FutureExt, StreamExt, executor::block_on, stream::FusedStream};

#[test]
fn ready_into_stream() {
    let stream = ready(1).into_stream();

    let mut clone = stream.fork();

    assert!(!clone.is_terminated());

    block_on(async {
        let _ = clone.next().await;
        let _ = clone.next().await;
    });

    assert!(clone.is_terminated());
}

#[test]
fn two_clones_terminated() {
    let stream = ready(1).into_stream();

    let mut clone = stream.fork();

    assert!(!clone.is_terminated());
    assert!(!clone.is_terminated());

    block_on(async {
        let _ = clone.next().await;
        assert!(clone.is_terminated());
        let _ = clone.next().await;
        assert!(clone.is_terminated());
    });
    assert!(clone.is_terminated());
    assert!(clone.is_terminated());
}