extern crate rustijvm; fn steps(machine: &mut rustijvm::Machine, num: usize) { for _ in 0..num { machine.step().unwrap(); } } #[test] fn task5_invokenoargs() { let mut machine = rustijvm::Machine::new_from_file("files/task5/TestInvokeNoArgs.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 2); assert_eq!(machine.get_tos(), Ok(0x42)); steps(&mut machine, 2); assert_eq!(machine.get_tos(), Ok(0x43)); steps(&mut machine, 2); assert_eq!(machine.get_tos(), Ok(0x43)); } #[test] fn task5_invoke1() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual1.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 3); let pc = machine.get_program_counter(); steps(&mut machine, 1); assert_ne!(machine.get_program_counter(), pc + 1); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x1)); steps(&mut machine, 2); } #[test] fn task5_ireturn1() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual1.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x1)); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x2)); } #[test] fn task5_invoke2() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual2.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 5); let pc = machine.get_program_counter(); steps(&mut machine, 1); assert_ne!(machine.get_program_counter(), pc + 1); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x2)); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x3)); steps(&mut machine, 3); } #[test] fn task5_ireturn2() { let mut machine = rustijvm::Machine::new_from_file("files/task5/test-invokevirtual2.ijvm").unwrap(); machine.set_output(rustijvm::stubs::output_stub()); steps(&mut machine, 10); assert_eq!(machine.get_tos(), Ok(0x5)); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x2)); }