#[test]
fn test_sub() {
// LOADI R0, 20
// LOADI R1, 8
// SUB R2, R0, R1
// LOG R2
// HALT
let bytecode = vec![
0x70, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0x20, 0x10, // SUB opcode = 0x11
0xF0, 0x20,
0x00,
];
let mut vm = Vm::new(bytecode, 1_000_000, Address::ZERO, Address::ZERO, 0);
let result = vm.run().unwrap();
assert!(result.success);
assert_eq!(result.logs, vec![12]); // 20 - 8 = 12
}
#[test]
fn test_mul() {
// LOADI R0, 6
// LOADI R1, 7
// MUL R2, R0, R1
// LOG R2
// HALT
let bytecode = vec![
0x70, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x10, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x12, 0x20, 0x10, // MUL opcode = 0x12
0xF0, 0x20,
0x00,
];
let mut vm = Vm::new(bytecode, 1_000_000, Address::ZERO, Address::ZERO, 0);
let result = vm.run().unwrap();
assert!(result.success);
assert_eq!(result.logs, vec![42]); // 6 × 7 = 42
}
#[test]
fn test_div() {
// LOADI R0, 20
// LOADI R1, 4
// DIV R2, R0, R1
// LOG R2
// HALT
let bytecode = vec![
0x70, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x70, 0x10, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x20, 0x10, // DIV opcode = 0x13
0xF0, 0x20,
0x00,
];
let mut vm = Vm::new(bytecode, 1_000_000, Address::ZERO, Address::ZERO, 0);
let result = vm.run().unwrap();
assert!(result.success);
assert_eq!(result.logs, vec![5]); // 20 ÷ 4 = 5
}