use super::*;
#[test]
#[should_panic(expected = "IFDS CPU oracle received malformed problem")]
fn solve_cpu_rejects_out_of_domain_seed() {
let _ = solve_cpu(1, 2, 1, &[], &[], &[], &[], &[(0, 0, 1)]);
}
#[test]
fn solve_borrowed_via_rejects_out_of_domain_seed_before_dispatch() {
let dispatch = |_: &Program, _: &[&[u8]], _: Option<[u32; 3]>| {
panic!("malformed IFDS seed must be rejected before GPU dispatch")
};
let err = solve_borrowed_via(&dispatch, 1, 2, 1, &[], &[], &[], &[], &[(0, 0, 1)], 1)
.expect_err("out-of-domain IFDS seed must be rejected");
assert!(
err.contains("weir IFDS GPU solve seed tuple 0 is out of domain"),
"unexpected diagnostic: {err}"
);
assert!(
err.contains("Fix: discard or remap malformed dataflow facts"),
"diagnostic must be actionable: {err}"
);
}
#[test]
fn solve_borrowed_via_rejects_zero_iteration_budget_before_dispatch() {
let dispatch = |_: &Program, _: &[&[u8]], _: Option<[u32; 3]>| {
panic!("zero IFDS iteration budget must be rejected before GPU dispatch")
};
let err = solve_borrowed_via(
&dispatch,
1,
1,
1,
&[(0, 0, 0)],
&[],
&[],
&[],
&[(0, 0, 0)],
0,
)
.expect_err("zero IFDS iteration budget must be rejected");
assert!(
err.contains("max_iterations=0") && err.contains("positive fixpoint iteration budget"),
"unexpected diagnostic: {err}"
);
}
#[test]
fn solve_borrowed_via_rejects_out_of_domain_output_tail_bits() {
use std::cell::Cell;
let calls = Cell::new(0usize);
let dispatch = |_: &Program, _: &[&[u8]], _: Option<[u32; 3]>| {
let call = calls.get();
calls.set(call + 1);
if call == 0 {
Ok(vec![
[0u32, 0]
.iter()
.flat_map(|word| word.to_le_bytes())
.collect(),
vec![0; 4],
vec![0; 4],
0u32.to_le_bytes().to_vec(),
])
} else {
Ok(vec![0b10u32.to_le_bytes().to_vec()])
}
};
let err = solve_borrowed_via(
&dispatch,
1,
1,
1,
&[(0, 0, 0)],
&[],
&[],
&[],
&[(0, 0, 0)],
1,
)
.expect_err("backend frontier tail bit outside IFDS node_count must be rejected");
assert!(
err.contains("outside the declared domain"),
"unexpected diagnostic: {err}"
);
}
#[test]
fn solve_borrowed_via_rejects_malformed_gpu_built_csr() {
let dispatch = |_: &Program, _: &[&[u8]], _: Option<[u32; 3]>| {
Ok(vec![
[0u32, 1]
.iter()
.flat_map(|word| word.to_le_bytes())
.collect(),
vec![0; 4],
1u32.to_le_bytes().to_vec(),
1u32.to_le_bytes().to_vec(),
])
};
let err = solve_borrowed_via(
&dispatch,
1,
1,
1,
&[(0, 0, 0)],
&[],
&[],
&[],
&[(0, 0, 0)],
1,
)
.expect_err("GPU-built IFDS CSR with out-of-domain target must be rejected");
assert!(
err.contains("targets node 1"),
"unexpected diagnostic: {err}"
);
}