weirflow 0.1.0

GPU-first dataflow analysis primitives for Vyre and Santh compiler pipelines.
Documentation
use std::{fs, path::Path};

const DISPATCH_ADAPTER_SOURCES: &[&str] = &[
    "src/reaching.rs",
    "src/live.rs",
    "src/slice.rs",
    "src/ifds.rs",
    "src/points_to.rs",
    "src/range.rs",
    "src/loop_sum.rs",
    "src/callgraph.rs",
    "src/dominators.rs",
    "src/summary.rs",
    "src/ifds_gpu.rs",
];

fn crate_root() -> &'static Path {
    Path::new(env!("CARGO_MANIFEST_DIR"))
}

fn read_source(relative: &str) -> String {
    let path = crate_root().join(relative);
    fs::read_to_string(&path).unwrap_or_else(|err| {
        panic!(
            "failed to read {}; Fix: keep Weir output scratch contract paths current: {err}",
            path.display()
        )
    })
}

#[test]
fn dispatch_adapters_preserve_reusable_output_slots() {
    for relative in DISPATCH_ADAPTER_SOURCES {
        let source = read_source(relative);
        assert!(
            !source.contains("outputs.clear();\n            outputs.extend(result);")
                && !source.contains("outputs.clear();\n                        outputs.extend(result);"),
            "{relative} drops reusable output slots with clear()+extend(result); Fix: use output_scratch::replace_outputs_preserving_slots"
        );
    }
}