futuresdr 0.0.39

An Experimental Async SDR Runtime for Heterogeneous Architectures.
Documentation
use anyhow::Result;
use futuresdr::blocks::FiniteSource;
use futuresdr::blocks::Head;
use futuresdr::blocks::VectorSink;
use futuresdr::prelude::*;

#[test]
fn finite_source_const_fn() -> Result<()> {
    let mut fg = Flowgraph::new();

    let src: FiniteSource<_, _> = FiniteSource::new(|| Some(123u32));
    let head = Head::<u32>::new(10);
    let snk = VectorSink::<u32>::new(10);

    connect!(fg, src > head > snk);

    Runtime::new().run(fg)?;

    let snk = snk.get()?;
    let v = snk.items();

    assert_eq!(v.len(), 10);
    for i in v {
        assert_eq!(*i, 123u32);
    }

    Ok(())
}

#[test]
fn finite_source_mut_fn() -> Result<()> {
    let mut fg = Flowgraph::new();

    let mut v = vec![0u32, 1, 2, 3].into_iter();
    let src: FiniteSource<_, _> = FiniteSource::new(move || v.next());
    let snk = VectorSink::<u32>::new(10);

    connect!(fg, src > snk);

    Runtime::new().run(fg)?;

    let snk = snk.get()?;
    let v = snk.items();

    assert_eq!(v.len(), 4);
    for (i, n) in v.iter().enumerate() {
        assert_eq!(i as u32, *n);
    }

    Ok(())
}