Most tests yay
This commit is contained in:
128
tests/task3.rs
Normal file
128
tests/task3.rs
Normal file
@@ -0,0 +1,128 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user