#[cfg(test)]
mod tests {
    use crate::backend::VM;
    use crate::mir::{MirCompiler, MirPrinter, MirVerifier};
    use crate::parser::NyashParser;

    #[test]
    #[ignore = "env.box externcall unsupported in current pure VM path; kept as historical smoke"]
    fn vm_exec_new_string_length_under_pure_mode() {
        // Enable Core-13 pure mode
        std::env::set_var("NYASH_MIR_CORE13_PURE", "1");

        // Nyash code: return (new StringBox("Hello")).length()
        let code = r#"
return (new StringBox("Hello")).length()
"#;

        // Parse -> MIR -> VM execute
        let ast = NyashParser::parse_from_string(code).expect("parse");
        let mut compiler = crate::mir::MirCompiler::new();
        let result = compiler.compile(ast).expect("compile");

        let mut vm = VM::new();
        let out = vm.execute_module(&result.module).expect("vm exec");
        // Expect 5 as string (to_string_box) for convenience
        assert_eq!(out.to_string_box().value, "5");

        // Cleanup
        std::env::remove_var("NYASH_MIR_CORE13_PURE");
    }

    /// Minimal smoke for MirInstruction::DebugLog
    #[test]
    fn mir_debuglog_minimal_printer_and_verifier() {
        std::env::set_var("NYASH_FEATURES", "stage3");
        std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
        std::env::set_var("NYASH_MIR_DEBUG_LOG", "1");

        let src = r#"
static box Main {
  method main(args) {
    local x = 1
    local y = 2
    // DebugLog 自体の存在が Verifier/Printer で問題にならないことの確認用。
    return x + y
  }
}
"#;

        let ast = NyashParser::parse_from_string(src).expect("parse ok");
        let mut mc = MirCompiler::with_options(false);
        let cr = mc.compile(ast).expect("compile ok");

        let mut verifier = MirVerifier::new();
        if let Err(errors) = verifier.verify_module(&cr.module) {
            for e in &errors {
                eprintln!("[mir-debuglog] {}", e);
            }
            panic!("MIR verification failed for DebugLog minimal case");
        }

        let dump = MirPrinter::new().print_module(&cr.module);
        eprintln!("----- MIR DUMP (DebugLog.min) -----\n{}", dump);
    }
}
