use std::fmt::Write;
use std::mem;
use starlark_syntax::golden_test_template::golden_test_template;
use crate::assert::Assert;
use crate::eval::compiler::def::FrozenDef;
use crate::syntax::Dialect;
fn test_function_bytecode(program: &str) -> String {
let program = program.trim();
let mut a = Assert::new();
a.dialect(&Dialect::AllOptionsInternal);
let def = a
.module("instrs.star", program)
.get("test")
.unwrap()
.downcast::<FrozenDef>()
.unwrap();
let mut golden = String::new();
writeln!(golden, "{}", program).unwrap();
writeln!(golden).unwrap();
writeln!(golden, "# Bytecode:").unwrap();
writeln!(golden).unwrap();
writeln!(golden, "{}", def.bc().dump_debug().trim()).unwrap();
golden
}
pub(crate) fn bc_golden_test(test_name: &str, program: &str) {
if mem::size_of::<usize>() != mem::size_of::<u64>() {
return;
}
let output = test_function_bytecode(program);
golden_test_template(&format!("src/tests/bc/golden/{test_name}.golden"), &output);
}