use vyre::ir::{BufferDecl, DataType, Expr, Node, Program};
use vyre_conform::{reference::interp, spec::value::Value};
#[test]
fn cast_to_vec2u32_preserves_both_components() {
let program = Program {
entry_op_id: None,
buffers: vec![
BufferDecl::read("v2_in", 0, DataType::Vec2U32),
BufferDecl::read_write("v2_out", 1, DataType::Vec2U32),
],
workgroup_size: [1, 1, 1],
entry: vec![Node::store(
"v2_out",
Expr::u32(0),
Expr::Cast {
target: DataType::Vec2U32,
value: Box::new(Expr::load("v2_in", Expr::u32(0))),
},
)],
};
let bytes = vec![0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00];
let input = Value::Bytes(bytes.clone());
let outputs = interp::run(&program, &[input, Value::Bytes(vec![0; 8])])
.expect("cast must preserve both vec2 components");
assert_eq!(outputs, vec![Value::Bytes(bytes)]);
}