2026-01-29 15:45:48 +00:00

51 lines
1.4 KiB
Rust

use prometeu_compiler::compiler;
use prometeu_bytecode::pbc::parse_pbc;
use prometeu_bytecode::disasm::disasm;
use prometeu_bytecode::opcode::OpCode;
use std::fs;
use tempfile::tempdir;
#[test]
fn test_compile_hip_program() {
let dir = tempdir().unwrap();
let project_dir = dir.path();
// Create prometeu.json
fs::write(
project_dir.join("prometeu.json"),
r#"{
"script_fe": "pbs",
"entry": "main.pbs"
}"#,
).unwrap();
// Create main.pbs with HIP effects
let code = "
fn frame(): void {
let x = alloc int;
mutate x as v {
let y = v + 1;
}
}
";
fs::write(project_dir.join("main.pbs"), code).unwrap();
// Compile
let unit = compiler::compile(project_dir).expect("Failed to compile");
// Parse PBC
let pbc = parse_pbc(&unit.rom).expect("Failed to parse PBC");
// Disassemble
let instrs = disasm(&pbc.rom).expect("Failed to disassemble");
// Verify opcodes exist in bytecode
let opcodes: Vec<_> = instrs.iter().map(|i| i.opcode).collect();
assert!(opcodes.contains(&OpCode::Alloc));
assert!(opcodes.contains(&OpCode::LoadRef)); // From ReadGate
assert!(opcodes.contains(&OpCode::StoreRef)); // From WriteGate
assert!(opcodes.contains(&OpCode::Add));
assert!(opcodes.contains(&OpCode::Ret));
}