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