extern crate rustijvm; fn steps(machine: &mut rustijvm::machine::Machine, num: usize) { for _ in 0..num { machine.step().unwrap(); } } #[test] fn advanced2_nested_invoke_simple() { let mut machine = rustijvm::machine::Machine::new_from_file("files/advanced/test-nestedinvoke-simple.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); 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::Machine::new_from_file("files/advanced/test-nestedinvoke.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); 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)); }