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"
);
}
}