Files
RustIJVM/tests/advanced2.rs
2018-05-23 13:40:24 +02:00

62 lines
1.9 KiB
Rust

extern crate rustijvm;
fn steps(machine: &mut rustijvm::Machine, num: usize) {
for _ in 0..num {
machine.step().unwrap();
}
}
#[test]
fn advanced2_nested_invoke_simple() {
let mut machine = rustijvm::Machine::new_from_file("files/advanced/test-nestedinvoke-simple.ijvm").unwrap();
steps(&mut machine, 1);
let pc_main = machine.get_program_counter() + 3;
steps(&mut machine, 1);
assert_ne!(machine.get_program_counter(), pc_main);
steps(&mut machine, 1);
assert_ne!(machine.get_tos(), Ok(0x9));
let pc_magic = machine.get_program_counter() + 3;
steps(&mut machine, 1);
assert_ne!(machine.get_program_counter(), pc_magic);
let pc_addone = machine.get_program_counter() + 3;
steps(&mut machine, 2);
assert_ne!(machine.get_program_counter(), pc_addone);
assert_eq!(machine.get_program_counter(), pc_magic);
steps(&mut machine, 1);
assert_ne!(machine.get_program_counter(), pc_magic);
assert_eq!(machine.get_program_counter(), pc_main);
}
#[test]
fn advanced2_nested_invoke() {
let mut machine = rustijvm::Machine::new_from_file("files/advanced/test-nestedinvoke.ijvm").unwrap();
steps(&mut machine, 8);
assert_eq!(machine.get_tos(), Ok(0x6));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x9));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x9));
steps(&mut machine, 1);
assert_ne!(machine.get_tos(), Ok(0x9));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x9));
steps(&mut machine, 1);
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x9));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x1));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0xA));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0xA));
steps(&mut machine, 3);
assert_eq!(machine.get_tos(), Ok(0xA));
}