use vyre::ir::{BufferDecl, DataType, Program};
use vyre::{BackendError, VyreBackend};
fn empty_program() -> Program {
Program::wrapped(
vec![BufferDecl::output("out", 0, DataType::U32)],
[1, 1, 1],
Vec::new(),
)
}
#[test]
fn empty_program_dispatch_returns_structured_error() {
let program = empty_program();
let backend = vyre_driver_wgpu::WgpuBackend::acquire()
.expect("Fix: live WGPU backend is required for empty-program dispatch coverage");
let inputs: Vec<Vec<u8>> = vec![];
let config = vyre::DispatchConfig::default();
let result = backend.dispatch(&program, &inputs, &config);
assert!(
matches!(
result,
Err(BackendError::InvalidProgram { .. })
| Err(BackendError::DispatchFailed { .. })
| Err(BackendError::KernelCompileFailed { .. })
),
"empty program should yield a structured BackendError, got {result:?}"
);
}
#[test]
fn dispatch_with_mismatched_inputs_yields_structured_error() {
let program = Program::wrapped(
vec![
BufferDecl::read("a", 0, DataType::U32),
BufferDecl::output("out", 1, DataType::U32),
],
[1, 1, 1],
Vec::new(),
);
let backend = vyre_driver_wgpu::WgpuBackend::acquire()
.expect("Fix: live WGPU backend is required for adversarial dispatch coverage");
let inputs: Vec<Vec<u8>> = vec![]; let config = vyre::DispatchConfig::default();
let result = backend.dispatch(&program, &inputs, &config);
assert!(
matches!(
result,
Err(BackendError::InvalidProgram { .. })
| Err(BackendError::DispatchFailed { .. })
| Err(BackendError::KernelCompileFailed { .. })
),
"missing-input dispatch must fail; got {result:?}"
);
}
#[test]
fn empty_program_compile_native_returns_result() {
let program = empty_program();
let backend = vyre_driver_wgpu::WgpuBackend::acquire()
.expect("Fix: live WGPU backend is required for compile_native adversarial coverage");
let config = vyre::DispatchConfig::default();
if let Err(error) = backend.compile_native(&program, &config) {
assert_ne!(
error.to_string().len(),
0,
"structured BackendError must carry diagnostic text"
);
}
}