Files
hakorune/src/tests/mir_peek_lower.rs

24 lines
1.0 KiB
Rust

use crate::mir::{MirCompiler, MirPrinter};
use crate::ast::{ASTNode, LiteralValue, Span};
#[test]
fn mir_lowering_of_peek_expr() {
// Build AST: peek 2 { 1 => 10, 2 => 20, else => 30 }
let ast = ASTNode::PeekExpr {
scrutinee: Box::new(ASTNode::Literal { value: LiteralValue::Integer(2), span: Span::unknown() }),
arms: vec![
(LiteralValue::Integer(1), ASTNode::Literal { value: LiteralValue::Integer(10), span: Span::unknown() }),
(LiteralValue::Integer(2), ASTNode::Literal { value: LiteralValue::Integer(20), span: Span::unknown() }),
],
else_expr: Box::new(ASTNode::Literal { value: LiteralValue::Integer(30), span: Span::unknown() }),
span: Span::unknown(),
};
let mut compiler = MirCompiler::new();
let res = compiler.compile(ast).expect("compile ok");
let dump = MirPrinter::new().print_module(&res.module);
assert!(dump.contains("br "), "expected branches in MIR:\n{}", dump);
assert!(dump.contains("phi"), "expected phi merge in MIR:\n{}", dump);
}