24 lines
1.0 KiB
Rust
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);
|
|
}
|
|
|