vyre 0.4.0

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

use crate::ops::workgroup::queue_priority::{PriorityError, PriorityItem, WorkgroupPriorityQueue};

#[test]
pub fn pops_highest_priority_first() {
    let mut queue: WorkgroupPriorityQueue<u32> = WorkgroupPriorityQueue::new(3);
    assert!(queue.push(10_u32, 1).is_ok());
    assert!(queue.push(20, 9).is_ok());
    assert_eq!(
        queue.pop_max(),
        Ok(PriorityItem {
            value: 20,
            priority: 9,
        })
    );
    assert_eq!(
        queue.pop_max(),
        Ok(PriorityItem {
            value: 10,
            priority: 1,
        })
    );
}

#[test]
pub fn overflow_preserves_existing_max() {
    let mut queue: WorkgroupPriorityQueue<u32> = WorkgroupPriorityQueue::new(1);
    assert!(queue.push(4_u32, 7).is_ok());
    assert_eq!(queue.push(8, 99), Err(PriorityError::Overflow));
    assert_eq!(
        queue.peek_max(),
        Ok(PriorityItem {
            value: 4,
            priority: 7,
        })
    );
}

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