use weir::cross_language::cross_language;
use weir::oracle::graph::cross_language as cpu_ref;
#[test]
fn cross_language_program_includes_all_named_buffers() {
let prog = cross_language(
64,
"source",
"sink",
"post_cross",
"current",
"next",
"changed",
"seed",
"out",
)
.expect("Fix: cross-language test program must fuse");
let names: Vec<&str> = prog.buffers().iter().map(|b| b.name()).collect();
for required in [
"source",
"sink",
"post_cross",
"current",
"next",
"changed",
"out",
] {
assert!(names.contains(&required), "missing {required} in {names:?}");
}
assert!(!prog.entry().is_empty());
}
#[test]
fn cross_language_program_scales_with_node_count() {
for &n in &[1u32, 32, 64, 256] {
let prog = cross_language(n, "s", "k", "p", "c", "x", "ch", "sd", "o")
.expect("Fix: cross-language test program must fuse");
assert!(prog.buffers().len() >= 7);
assert!(!prog.entry().is_empty());
}
}
#[test]
fn cpu_ref_returns_zero_when_no_path_crosses_an_ffi_edge() {
let node_count = 1u32;
let edge_offsets = vec![0u32, 0u32];
let edge_targets: Vec<u32> = vec![];
let edge_kind_mask: Vec<u32> = vec![];
let edge_is_ffi: Vec<u32> = vec![];
let source = vec![1u32]; let sink = vec![1u32];
let out = cpu_ref(
node_count,
&edge_offsets,
&edge_targets,
&edge_kind_mask,
&edge_is_ffi,
&source,
&sink,
);
assert!(
out.iter().all(|w| *w == 0),
"no FFI edge → no reach; got {out:?}"
);
}