hydroflow 0.10.0

Hydro's low-level dataflow runtime and IR
Documentation
use std::cell::RefCell;
use std::rc::Rc;

use hydroflow::hydroflow_syntax;
use hydroflow::scheduled::graph::Hydroflow;
use hydroflow::util::multiset::HashMultiSet;

pub fn main() {
    let output = Rc::new(RefCell::new(
        HashMultiSet::<(usize, usize, usize)>::default(),
    ));

    let mut df: Hydroflow = {
        let output = output.clone();
        hydroflow_syntax! {
            source_iter(0..2) -> [0]cj;
            source_iter(0..2) -> [1]cj;
            source_iter(0..2) -> [2]cj;

            cj = import!("triple_cross_join.hf")
                -> for_each(|x| output.borrow_mut().insert(x));
        }
    };

    println!(
        "{}",
        df.meta_graph().unwrap().to_mermaid(&Default::default())
    );

    df.run_available();

    #[rustfmt::skip]
    assert_eq!(
        *output.borrow(),
        HashMultiSet::from_iter([
            (0, 0, 0),
            (0, 0, 1),
            (0, 1, 0),
            (0, 1, 1),
            (1, 0, 0),
            (1, 0, 1),
            (1, 1, 0),
            (1, 1, 1),
        ])
    );
}

#[test]
fn test() {
    main();
}