futuresdr 0.0.39

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

#[test]
fn apply_into_iter() -> Result<()> {
    let multiplier = 3;
    let mut fg = Flowgraph::new();
    let orig: Vec<f32> = vec![1.0, 2.0, 3.0];
    let src = VectorSource::<f32>::new(orig.clone());
    let apply: ApplyIntoIter<_, _, _> =
        ApplyIntoIter::new(move |i: &f32| -> std::iter::RepeatN<f32> {
            std::iter::repeat_n(*i, multiplier)
        });
    let snk = VectorSink::<f32>::new(orig.len() * multiplier);

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

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

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

    assert_eq!(v.len(), multiplier * orig.len());
    for (i, v_after) in v.iter().enumerate() {
        let v_before: f32 = orig[i / multiplier];
        println!("Is {v_before} == {v_after}?");
        assert!((v_after - v_before).abs() < f32::EPSILON);
    }

    Ok(())
}