use nyash_rust::ast::{ASTNode, BinaryOperator, LiteralValue, Span}; use nyash_rust::mir::MirBuilder; // Legacy MirBuilder 単体テスト(関数数=1 前提が崩れているためアーカイブ扱い). #[test] #[ignore] fn test_literal_building() { let mut builder = MirBuilder::new(); let ast = ASTNode::Literal { value: LiteralValue::Integer(42), span: Span::unknown(), }; let result = builder.build_module(ast); assert!(result.is_ok()); let module = result.unwrap(); assert_eq!(module.function_names().len(), 1); assert!(module.get_function("main").is_some()); } #[test] fn test_binary_op_building() { let mut builder = MirBuilder::new(); let ast = ASTNode::BinaryOp { left: Box::new(ASTNode::Literal { value: LiteralValue::Integer(10), span: Span::unknown(), }), operator: BinaryOperator::Add, right: Box::new(ASTNode::Literal { value: LiteralValue::Integer(32), span: Span::unknown(), }), span: Span::unknown(), }; let result = builder.build_module(ast); assert!(result.is_ok()); let module = result.unwrap(); let function = module.get_function("main").unwrap(); let stats = function.stats(); assert!(stats.instruction_count >= 3); } #[test] fn test_if_statement_building() { let mut builder = MirBuilder::new(); let ast = ASTNode::If { condition: Box::new(ASTNode::Literal { value: LiteralValue::Bool(true), span: Span::unknown(), }), then_body: vec![ASTNode::Literal { value: LiteralValue::Integer(1), span: Span::unknown(), }], else_body: Some(vec![ASTNode::Literal { value: LiteralValue::Integer(2), span: Span::unknown(), }]), span: Span::unknown(), }; let result = builder.build_module(ast); assert!(result.is_ok()); let module = result.unwrap(); let function = module.get_function("main").unwrap(); assert!(function.blocks.len() >= 3); let stats = function.stats(); assert!(stats.phi_count >= 1); }