vyre-conform 0.1.0

Conformance suite for vyre backends — proves byte-identical output to CPU reference
Documentation
use vyre::ir::{BufferDecl, DataType, Expr, Node, Program};
use vyre_conform::{reference::interp, spec::value::Value};

/// ADVERSARIAL: workgroup_memory sizes Bytes buffers as count*0 — vector: a workgroup Bytes
/// buffer declared with count 100 receives zero backing bytes, so BufLen reports 0 instead of
/// 100.
#[test]
fn workgroup_bytes_buffer_honors_declared_count() {
    let program = Program {
        entry_op_id: None,
        buffers: vec![
            BufferDecl::workgroup("wg", 100, DataType::Bytes),
            BufferDecl::read_write("out", 0, DataType::U32),
        ],
        workgroup_size: [1, 1, 1],
        entry: vec![Node::store("out", Expr::u32(0), Expr::buf_len("wg"))],
    };

    let outputs = interp::run(&program, &[Value::Bytes(vec![0; 4])])
        .expect("workgroup Bytes buffer must be sized by count");

    // Spec: a workgroup buffer with count 100 should have 100 elements.
    assert_eq!(outputs, vec![Value::U32(100)]);
}