extern crate rustijvm; fn steps(machine: &mut rustijvm::Machine, num: usize) { for _ in 0..num { println!("step"); machine.step().unwrap(); } } #[test] fn task2_simple_bipush() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestBipush1.ijvm").unwrap(); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(42)); } #[test] fn task2_signed_bipush() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestBipush2.ijvm").unwrap(); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(-42)); } #[test] fn task2_simple_iadd() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIadd1.ijvm").unwrap(); steps(&mut machine, 3); assert_eq!(machine.cur_stack().top(), Ok(60)); } #[test] fn task2_signed_iadd() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIadd2.ijvm").unwrap(); steps(&mut machine, 3); assert_eq!(machine.cur_stack().top(), Ok(-60)); } #[test] fn task2_simple_isub() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIsub1.ijvm").unwrap(); steps(&mut machine, 3); assert_eq!(machine.cur_stack().top(), Ok(-10)); } #[test] fn task2_signed_isub() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIsub2.ijvm").unwrap(); steps(&mut machine, 3); assert_eq!(machine.cur_stack().top(), Ok(10)); } #[test] fn task2_simple_iand() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIAND1.ijvm").unwrap(); steps(&mut machine, 5); assert_eq!(machine.cur_stack().top(), Ok(1)); } #[test] fn task2_simple_ior() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestIOR1.ijvm").unwrap(); steps(&mut machine, 5); assert_eq!(machine.cur_stack().top(), Ok(127)); } #[test] fn task2_swap() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestSwap1.ijvm").unwrap(); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(10)); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(20)); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(10)); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(20)); } #[test] fn task2_simple_stack_operations() { let mut machine = rustijvm::Machine::new_from_file("files/task2/TestPop1.ijvm").unwrap(); steps(&mut machine, 3); assert_eq!(machine.cur_stack().top(), Ok(10)); steps(&mut machine, 3); assert_eq!(machine.cur_stack().top(), Ok(50)); steps(&mut machine, 1); assert_eq!(machine.cur_stack().top(), Ok(10)); }