use vyre::ir::{Node, Program};
use vyre_foundation::transform::visit::walk_nodes;
use vyre_libs::decode::{base64_decode, inflate_stored_block};
use vyre_primitives::decode::base64::BASE64_DECODE_OP_ID;
use vyre_primitives::decode::inflate::INFLATE_STORED_OP_ID;
fn region_count(program: &Program, expected: &str) -> usize {
let mut count = 0usize;
walk_nodes(program, |node| {
if matches!(node, Node::Region { generator, .. } if generator.as_str() == expected) {
count += 1;
}
});
count
}
#[test]
fn base64_decode_delegates_to_canonical_primitive() {
let program = base64_decode("encoded", "decoded", 8);
assert_eq!(program.workgroup_size(), [64, 1, 1]);
assert_eq!(program.buffers().len(), 4);
assert_eq!(program.output_buffer_indices(), vec![2, 3]);
assert_eq!(program.buffers()[0].count(), 8);
assert_eq!(program.buffers()[2].count(), 6);
assert_eq!(region_count(&program, BASE64_DECODE_OP_ID), 1);
}
#[test]
fn inflate_stored_delegates_to_canonical_primitive() {
let program = inflate_stored_block("encoded", "decoded", 10);
assert_eq!(program.workgroup_size(), [64, 1, 1]);
assert_eq!(program.buffers().len(), 3);
assert_eq!(program.output_buffer_indices(), vec![1, 2]);
assert_eq!(program.buffers()[0].count(), 10);
assert_eq!(program.buffers()[1].count(), 10);
assert_eq!(program.buffers()[2].count(), 1);
assert_eq!(region_count(&program, INFLATE_STORED_OP_ID), 1);
}