Add tests for task 1 and 2
This commit is contained in:
34
tests/task1.rs
Normal file
34
tests/task1.rs
Normal file
@@ -0,0 +1,34 @@
|
||||
extern crate rustijvm;
|
||||
|
||||
use rustijvm::binread::BinReadable;
|
||||
|
||||
#[test]
|
||||
fn task1_program1() {
|
||||
let machine = rustijvm::Machine::new_from_file("files/task1/program1.ijvm").unwrap();
|
||||
assert_eq!(machine.block.len(), 7);
|
||||
assert_eq!(machine.block[0], 0x10); // BIPUSH
|
||||
assert_eq!(machine.block[2], 0x10); // BIPUSH
|
||||
assert_eq!(machine.block[4], 0x60); // IADD
|
||||
assert_eq!(machine.block[5], 0xFD); // OUT
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn task1_program2() {
|
||||
let machine = rustijvm::Machine::new_from_file("files/task1/program2.ijvm").unwrap();
|
||||
assert_eq!(machine.block.len(), 16);
|
||||
assert_eq!(machine.block[0], 0x0);
|
||||
assert_eq!(machine.block[1], 0x13);
|
||||
assert_eq!(machine.block[4], 0x59);
|
||||
assert_eq!(machine.block[5], 0x13);
|
||||
assert_eq!(machine.block[8], 0x60);
|
||||
assert_eq!(machine.block[9], 0x13);
|
||||
assert_eq!(machine.block[12], 0x60);
|
||||
assert_eq!(machine.block[13], 0xFD);
|
||||
assert_eq!(machine.block[14], 0x0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn task1_program_counter() {
|
||||
let machine = rustijvm::Machine::new_from_file("files/task1/program1.ijvm").unwrap();
|
||||
assert_eq!(machine.get_program_counter(), 0);
|
||||
}
|
||||
88
tests/task2.rs
Normal file
88
tests/task2.rs
Normal file
@@ -0,0 +1,88 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user