#[must_use]
#[deprecated(
note = "reference oracle only; production code must dispatch the Weir Program on a concrete GPU backend or use weir::oracle for parity evidence"
)]
pub(crate) fn range_propagate_cpu(defs_in: &[u32], edges_in: &[u32], var_count: u32) -> Vec<u32> {
let slots = (var_count as usize).checked_mul(2).unwrap_or_else(|| {
panic!(
"range_propagate CPU oracle var_count={var_count} overflows host slot indexing. Fix: shard the oracle input."
)
});
if defs_in.len() != slots || edges_in.len() != slots {
panic!(
"range_propagate CPU oracle received malformed interval buffers: expected {slots} words, got defs_in={} edges_in={}",
defs_in.len(),
edges_in.len()
);
}
let mut out = crate::staging_reserve::reserved_vec(slots, "range CPU oracle output")
.unwrap_or_else(|error| panic!("range CPU oracle output reservation failed: {error}"));
for idx in 0..slots {
out.push(defs_in[idx].wrapping_add(edges_in[idx]));
}
out
}
#[cfg(test)]
#[allow(deprecated)]
mod tests {
use super::range_propagate_cpu;
#[test]
#[should_panic(expected = "range_propagate CPU oracle received malformed interval buffers")]
fn range_propagate_rejects_mismatched_defs_len() {
let _ = range_propagate_cpu(&[1, 2], &[1, 2, 3, 4], 2);
}
#[test]
#[should_panic(expected = "range_propagate CPU oracle received malformed interval buffers")]
fn range_propagate_rejects_mismatched_edges_len() {
let _ = range_propagate_cpu(&[1, 2, 3, 4], &[1, 2], 2);
}
}