weirflow 0.1.0

GPU-first dataflow analysis primitives for Vyre and Santh compiler pipelines.
Documentation
use super::*;

// 5. Summary edge handling
// ==================================================================

bfs_test!(
    no_summaries_empty_inter,
    2,
    2,
    1,
    &[(0, 0, 1), (1, 0, 1)],
    &[],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0)]
);

bfs_test!(
    single_summary_edge,
    2,
    2,
    1,
    &[(0, 0, 1)],
    &[(0, 1, 1, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (1, 0, 0)]
);

bfs_test!(
    multiple_summary_edges,
    3,
    2,
    1,
    &[(0, 0, 1), (1, 0, 1), (2, 0, 1)],
    &[(0, 1, 1, 0), (0, 1, 2, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![
        (0, 0, 0),
        (0, 1, 0),
        (1, 0, 0),
        (1, 1, 0),
        (2, 0, 0),
        (2, 1, 0)
    ]
);

bfs_test!(
    summary_cross_proc,
    2,
    2,
    1,
    &[(0, 0, 1)],
    &[(0, 1, 1, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (1, 0, 0)]
);

bfs_test!(
    summary_same_proc,
    1,
    3,
    1,
    &[(0, 0, 1)],
    &[(0, 1, 0, 2)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (0, 2, 0)]
);

bfs_test!(
    summary_with_intra,
    2,
    3,
    1,
    &[(0, 0, 1), (0, 1, 2), (1, 0, 1)],
    &[(0, 2, 1, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (0, 2, 0), (1, 0, 0), (1, 1, 0)]
);

bfs_test!(
    summary_only,
    2,
    1,
    1,
    &[],
    &[(0, 0, 1, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (1, 0, 0)]
);

bfs_test!(
    empty_summary_vec_with_intra,
    2,
    2,
    1,
    &[(0, 0, 1)],
    &[],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0)]
);

bfs_test!(
    summary_chain_3_procs,
    3,
    2,
    1,
    &[(0, 0, 1), (1, 0, 1), (2, 0, 1)],
    &[(0, 1, 1, 0), (1, 1, 2, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![
        (0, 0, 0),
        (0, 1, 0),
        (1, 0, 0),
        (1, 1, 0),
        (2, 0, 0),
        (2, 1, 0)
    ]
);

bfs_test!(
    summary_star,
    4,
    2,
    1,
    &[(0, 0, 1)],
    &[(0, 1, 1, 0), (0, 1, 2, 0), (0, 1, 3, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (1, 0, 0), (2, 0, 0), (3, 0, 0)]
);

bfs_test!(
    summary_cycle,
    3,
    2,
    1,
    &[(0, 0, 1), (1, 0, 1), (2, 0, 1)],
    &[(0, 1, 1, 0), (1, 1, 2, 0), (2, 1, 0, 0)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![
        (0, 0, 0),
        (0, 1, 0),
        (1, 0, 0),
        (1, 1, 0),
        (2, 0, 0),
        (2, 1, 0)
    ]
);

bfs_test!(
    summary_with_kill_on_target,
    2,
    2,
    1,
    &[(0, 0, 1)],
    &[(0, 1, 1, 0)],
    &[],
    &[(1, 0, 0)],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (1, 0, 0)]
);

bfs_test!(
    summary_with_gen_on_target,
    2,
    2,
    2,
    &[(0, 0, 1), (1, 0, 1)],
    &[(0, 1, 1, 0)],
    &[(1, 0, 1)],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (1, 0, 0), (1, 1, 0), (1, 1, 1)]
);

bfs_test!(
    summary_return_path,
    2,
    3,
    1,
    &[(0, 0, 1), (0, 1, 2), (1, 0, 1)],
    &[(0, 1, 1, 0), (1, 1, 0, 1)],
    &[],
    &[],
    &[(0, 0, 0)],
    vec![(0, 0, 0), (0, 1, 0), (0, 2, 0), (1, 0, 0), (1, 1, 0)]
);