extern crate rustijvm; fn steps(machine: &mut rustijvm::Machine, num: usize) { for _ in 0..num { machine.step().unwrap(); } } #[test] fn task3_goto1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/GOTO1.ijvm").unwrap(); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x31)); steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(0x33)); steps(&mut machine, 1); } #[test] fn task3_goto2() { let mut machine = rustijvm::Machine::new_from_file("files/task3/GOTO2.ijvm").unwrap(); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x31)); steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(0x33)); steps(&mut machine, 3); assert_eq!(machine.get_tos(), Ok(0x32)); steps(&mut machine, 1); } #[test] fn task3_ifeq1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/IFEQ1.ijvm").unwrap(); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x5)); // L2 iteration 1 steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x4)); steps(&mut machine, 3); let pc = machine.get_program_counter(); // L2 iteration 2 steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x3)); steps(&mut machine, 3); assert_eq!(machine.get_program_counter(), pc); // L2 iteration 3 steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x2)); steps(&mut machine, 3); assert_eq!(machine.get_program_counter(), pc); // L2 iteration 4 steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x1)); steps(&mut machine, 3); assert_eq!(machine.get_program_counter(), pc); // L2 iteration 5 steps(&mut machine, 6); assert_eq!(machine.get_tos(), Ok(0x0)); steps(&mut machine, 2); assert_eq!(machine.get_program_counter(), pc + 15); } #[test] fn task3_iflt1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/IFLT1.ijvm").unwrap(); let mut pc = 0; // L1 steps(&mut machine, 2); assert_eq!(machine.get_program_counter(), pc + 5); pc = machine.get_program_counter(); // L2 steps(&mut machine, 2); assert_eq!(machine.get_program_counter(), pc + 5); pc = machine.get_program_counter(); // L3 steps(&mut machine, 2); assert_eq!(machine.get_program_counter(), pc + 5); pc = machine.get_program_counter(); // L4 steps(&mut machine, 4); assert_eq!(machine.get_program_counter(), pc + 19); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x37)); } #[test] fn task3_ificmpeq1() { let mut machine = rustijvm::Machine::new_from_file("files/task3/IFICMPEQ1.ijvm").unwrap(); let mut pc = 0; // L1 steps(&mut machine, 3); assert_eq!(machine.get_program_counter(), pc + 7); pc = machine.get_program_counter(); // L2 steps(&mut machine, 5); assert_eq!(machine.get_program_counter(), pc + 10); pc = machine.get_program_counter(); // L3 steps(&mut machine, 4); assert_eq!(machine.get_program_counter(), pc + 8); pc = machine.get_program_counter(); // L4 for _ in 0..3 { steps(&mut machine, 3); assert_eq!(machine.get_program_counter(), pc); pc = machine.get_program_counter() } // L6 steps(&mut machine, 2); assert_eq!(machine.get_program_counter(), pc + 9); steps(&mut machine, 1); assert_eq!(machine.get_tos(), Ok(0x13)); }