vyre 0.4.0

GPU compute intermediate representation with a standard operation library
Documentation
// Unit tests for the CPU reference of `workgroup.queue_fifo`.

use crate::ops::workgroup::queue_fifo::{FifoError, WorkgroupQueueFifo};

#[test]
pub fn preserves_total_enqueue_order() {
    let mut queue: WorkgroupQueueFifo<u32> = WorkgroupQueueFifo::new(3);
    assert!(queue.enqueue(1_u32).is_ok());
    assert!(queue.enqueue(2).is_ok());
    assert_eq!(queue.dequeue(), Ok(1));
    assert_eq!(queue.dequeue(), Ok(2));
}

#[test]
pub fn overflow_does_not_drop_head() {
    let mut queue: WorkgroupQueueFifo<u32> = WorkgroupQueueFifo::new(1);
    assert!(queue.enqueue(9_u32).is_ok());
    assert_eq!(queue.enqueue(10), Err(FifoError::Overflow));
    assert_eq!(queue.dequeue(), Ok(9));
}

#[test]
pub fn wgsl_kernel_source_exposes_the_expected_entry_point() {
    let wgsl = crate::ops::workgroup::queue_fifo::lowering::WGSL;
    let entry = crate::ops::workgroup::queue_fifo::lowering::ENTRY_POINT;
    assert!(wgsl.contains(entry), "WGSL missing entry point {entry}");
    assert!(crate::ops::workgroup::queue_fifo::lowering::exposes_registered_entry_point());
}