use super::super::super::*;
use crate::instruction::OpCode;
#[test]
fn high_level_lifts_boolean_ops() {
let script = [
OpCode::Push1.byte(),
OpCode::Push1.byte(),
OpCode::Booland.byte(),
OpCode::Ret.byte(),
];
let nef_bytes = build_nef(&script);
let decompilation = Decompiler::new()
.decompile_bytes(&nef_bytes)
.expect("decompile succeeds");
assert!(decompilation
.high_level
.as_deref()
.expect("high-level output")
.contains("return t0 && t1;"));
}
#[test]
fn high_level_handles_stack_manipulation_and_unary_ops() {
let script = [
OpCode::Push1.byte(),
OpCode::Dup.byte(),
OpCode::Add.byte(),
OpCode::Inc.byte(),
OpCode::Ret.byte(),
];
let nef_bytes = build_nef(&script);
let decompilation = Decompiler::new()
.decompile_bytes(&nef_bytes)
.expect("decompile succeeds");
let hl = decompilation
.high_level
.as_deref()
.expect("high-level output");
assert!(hl.contains("let t1 = t0 + t0;"), "expected t0+t0: {hl}");
assert!(hl.contains("return t1 + 1;"), "expected return t1+1: {hl}");
}