weirflow 0.1.0

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

#[test]
fn fixed_point_batch_rejects_mismatched_analysis_plan() {
    let dispatch = |_: &vyre::ir::Program,
                    inputs: &[&[u8]],
                    _: Option<[u32; 3]>,
                    outputs: &mut Vec<Vec<u8>>| {
        if inputs.len() < 6 {
            return crate::fixed_point_closure::fallback_bitset_equal_dispatch(inputs, outputs);
        }
        outputs.clear();
        outputs.push(inputs[5].to_vec());
        Ok(())
    };
    let graph = CsrGraph::new(
        2,
        &[0, 1, 1],
        &[1],
        &[vyre_primitives::predicate::edge_kind::CONTROL],
    );
    let mut batch = FixedPointBatch::new(&dispatch);
    let live_plan = batch
        .prepare_live_plan(graph)
        .expect("batch must prepare live plan once");

    let err = batch
        .reaching_plan(&live_plan, &[0b01], 4)
        .expect_err("reaching must reject a live-variable prepared plan");

    assert!(
        err.contains("expected Reaching"),
        "unexpected diagnostic: {err}"
    );
}

#[test]
fn fixed_point_batch_rejects_mismatched_prepared_graph_before_dispatch() {
    let dispatch = |_: &vyre::ir::Program,
                    _: &[&[u8]],
                    _: Option<[u32; 3]>,
                    _: &mut Vec<Vec<u8>>|
     -> Result<(), String> {
        panic!("prepared graph family validation must run before dispatch")
    };
    let graph = CsrGraph::new(
        2,
        &[0, 1, 1],
        &[1],
        &[vyre_primitives::predicate::edge_kind::CONTROL],
    );
    let mut batch = FixedPointBatch::new(&dispatch);
    let live_graph = batch
        .prepare_live(graph)
        .expect("batch must prepare live graph once");

    let err = batch
        .reaching_prepared(&live_graph, &[0b01], 4)
        .expect_err("reaching must reject a live-variable prepared graph");

    assert!(
        err.contains("expected Reaching"),
        "unexpected diagnostic: {err}"
    );
}