Files
RustIJVM/tests/task5.rs

72 lines
2.2 KiB
Rust

extern crate rustijvm;
fn steps(machine: &mut rustijvm::machine::Machine, num: usize) {
for _ in 0..num {
machine.step().unwrap();
}
}
#[test]
fn task5_invokenoargs() {
let mut machine = rustijvm::machine::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::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::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::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::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));
}