use morok_ir::types::ConstValue;
use morok_ir::{Op, UOp};
use std::sync::Arc;
use crate::TypedPatternMatcher;
use crate::symbolic::symbolic_simple;
pub fn get_matcher() -> &'static TypedPatternMatcher {
symbolic_simple()
}
pub fn assert_const_value(uop: &Arc<UOp>, expected: ConstValue) {
match uop.op() {
Op::Const(cv) => {
assert_eq!(cv.0, expected, "Expected Const({:?}), got Const({:?})", expected, cv.0);
}
other => panic!("Expected Const({:?}), got {:?}", expected, other),
}
}
pub fn assert_end_unwrapped(uop: &Arc<UOp>) -> Arc<UOp> {
match uop.op() {
Op::End { .. } => {
panic!("Expected END to be unwrapped, but got END operation: {:?}", uop.op())
}
_ => uop.clone(),
}
}
pub fn assert_end_range_count(uop: &Arc<UOp>, expected_count: usize) -> (Arc<UOp>, Vec<Arc<UOp>>) {
match uop.op() {
Op::End { computation, ranges } => {
assert_eq!(
ranges.len(),
expected_count,
"Expected END with {} ranges, got {} ranges",
expected_count,
ranges.len()
);
(Arc::clone(computation), ranges.iter().cloned().collect())
}
other => panic!("Expected END operation, got {:?}", other),
}
}