mod ast_format;
pub mod diff;
pub use ast_format::{ast_dump, fmt_output, ir_dump};
#[macro_export]
macro_rules! oracle_tests {
($helper:ident; $( $(#[$m:meta])* $name:ident => [ $($input:expr),+ $(,)? ] ),* $(,)?) => {
$( $(#[$m])* #[test] fn $name() { $( $crate::$helper!($input); )+ } )*
};
}
#[track_caller]
pub fn assert_parse_rejected(input: &str) {
assert!(
crate::parse(input).is_err(),
"expected parser to reject input, but it was accepted:\n{input}"
);
}
#[track_caller]
pub fn assert_parse_error_contains(input: &str, needle: &str) {
match crate::parse(input) {
Ok(_) => panic!("expected parser to reject input, but it was accepted:\n{input}"),
Err(err) => {
let msg = err.to_string();
assert!(
msg.contains(needle),
"parse error for {input:?} did not contain {needle:?}\nactual error: {msg}"
);
}
}
}