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());
}