use vyre::VyreBackend;
use crate::pipeline::execution::execute_op;
use crate::spec::primitive;
use crate::spec::types::OpSpec;
fn wrong_wgsl() -> String {
r"
fn vyre_op(index: u32, input_len: u32) -> u32 {
return ~(input.data[0u] ^ input.data[1u]);
}
"
.to_string()
}
fn wrong_cpu(input: &[u8]) -> Vec<u8> {
if input.len() < 8 {
return vec![0; 4];
}
let left = u32::from_le_bytes([input[0], input[1], input[2], input[3]]);
let right = u32::from_le_bytes([input[4], input[5], input[6], input[7]]);
(left & right).to_le_bytes().to_vec()
}
fn correct_xor_wgsl() -> String {
r"
fn vyre_op(index: u32, input_len: u32) -> u32 {
return input.data[0u] ^ input.data[1u];
}
"
.to_string()
}
#[allow(clippy::similar_names)]
#[inline]
pub(crate) fn verify_harness_integrity(backend: &dyn VyreBackend) -> Vec<String> {
let mut harness_bugs = Vec::new();
let wrong_gpu_spec = {
let id = "canary.wrong_gpu";
OpSpec::builder(id)
.signature(primitive::binary_u32_sig())
.cpu_fn(crate::spec::primitive::xor::cpu_fn())
.wgsl_fn(wrong_wgsl)
.category(crate::Category::A {
composition_of: vec![id],
})
.laws(vec![crate::spec::law::AlgebraicLaw::Bounded {
lo: 0,
hi: u32::MAX,
}])
.strictness(crate::spec::types::Strictness::Strict)
.version(1)
.alt_wgsl_fns(vec![("category_a_handwritten", wrong_wgsl)])
.build()
.expect("registry invariant violated")
};
let input = [0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00]; if let Ok((gpu, cpu)) = execute_op(backend, &wrong_gpu_spec, &input, 1) {
if gpu == cpu {
harness_bugs.push(
"HARNESS BUG: canary.wrong_gpu passed — GPU returned ~(a^b) but harness \
reported it as matching a^b. The compare() function is broken."
.to_string(),
);
}
} else {
}
let wrong_cpu_spec = {
let id = "canary.wrong_cpu";
OpSpec::builder(id)
.signature(primitive::binary_u32_sig())
.cpu_fn(wrong_cpu)
.wgsl_fn(correct_xor_wgsl)
.category(crate::Category::A {
composition_of: vec![id],
})
.laws(vec![crate::spec::law::AlgebraicLaw::Bounded {
lo: 0,
hi: u32::MAX,
}])
.strictness(crate::spec::types::Strictness::Strict)
.version(1)
.alt_wgsl_fns(vec![("category_a_handwritten", correct_xor_wgsl)])
.build()
.expect("registry invariant violated")
};
if let Ok((gpu, cpu)) = execute_op(backend, &wrong_cpu_spec, &input, 1) {
if gpu == cpu {
harness_bugs.push(
"HARNESS BUG: canary.wrong_cpu passed — CPU returned AND but GPU returned XOR, \
yet harness reported match. The compare() function is broken."
.to_string(),
);
}
}
harness_bugs
}