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