use vyre::backend::validation::{default_supported_ops, default_supported_ops_with_trap, node_op_id};
use vyre::ir::{Expr, Node};
#[test]
fn default_supported_ops_contains_core_nodes() {
let ops = default_supported_ops();
assert!(
ops.contains(node_op_id(&Node::Return)),
"Return must be in default supported ops"
);
assert!(
ops.contains(node_op_id(&Node::barrier())),
"Barrier must be in default supported ops"
);
}
#[test]
fn default_supported_ops_with_trap_contains_trap() {
let ops = default_supported_ops_with_trap();
assert!(
ops.contains(node_op_id(&Node::trap(Expr::u32(0), "test"))),
"Trap must be in default supported ops with trap"
);
}
#[test]
fn default_supported_ops_without_trap_does_not_contain_trap() {
let ops = default_supported_ops();
assert!(
!ops.contains(node_op_id(&Node::trap(Expr::u32(0), "test"))),
"Trap must NOT be in default supported ops without trap"
);
}
#[test]
fn node_op_id_return_is_stable() {
assert_eq!(node_op_id(&Node::Return), "vyre.node.return");
}
#[test]
fn node_op_id_barrier_is_stable() {
assert_eq!(node_op_id(&Node::barrier()), "vyre.node.barrier");
}
#[test]
fn node_op_id_trap_is_stable() {
assert_eq!(
node_op_id(&Node::trap(Expr::u32(0), "test")),
"vyre.node.trap"
);
}
#[test]
fn node_op_id_store_is_stable() {
assert_eq!(
node_op_id(&Node::store("buf", Expr::u32(0), Expr::u32(1))),
"vyre.node.store"
);
}
#[test]
fn node_op_id_async_load_is_stable() {
assert_eq!(
node_op_id(&Node::async_load("tag")),
"vyre.node.async_load"
);
}
#[test]
fn node_op_id_async_wait_is_stable() {
assert_eq!(
node_op_id(&Node::async_wait("tag")),
"vyre.node.async_wait"
);
}
#[test]
fn node_op_id_resume_is_stable() {
assert_eq!(node_op_id(&Node::resume("tag")), "vyre.node.resume");
}
#[test]
fn node_op_id_indirect_dispatch_is_stable() {
assert_eq!(
node_op_id(&Node::indirect_dispatch("buf", 0)),
"vyre.node.indirect_dispatch"
);
}
#[test]
fn node_op_id_is_deterministic_for_same_node() {
let node = Node::barrier();
assert_eq!(node_op_id(&node), node_op_id(&node));
}
#[test]
fn default_supported_ops_is_non_empty() {
let ops = default_supported_ops();
assert!(!ops.is_empty(), "default supported ops must not be empty");
}
#[test]
fn default_supported_ops_with_trap_is_superset() {
let base = default_supported_ops();
let with_trap = default_supported_ops_with_trap();
for op in base.iter() {
assert!(
with_trap.contains(op),
"with_trap must contain all base ops: {op}"
);
}
}