Most tests yay

This commit is contained in:
2018-05-23 13:40:24 +02:00
parent a65ab6aafa
commit 7e044abb53
12 changed files with 820 additions and 41 deletions

123
tests/task4.rs Normal file
View File

@@ -0,0 +1,123 @@
extern crate rustijvm;
use std::io::{Cursor, Read, Seek, SeekFrom};
use std::rc::Rc;
use std::sync::Mutex;
fn steps(machine: &mut rustijvm::Machine, num: usize) {
for _ in 0..num {
machine.step().unwrap();
}
}
#[test]
fn task4_ldcw1() {
let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest1.ijvm").unwrap();
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x1));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x3));
}
#[test]
fn task4_simple_load() {
let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest3.ijvm").unwrap();
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2a));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x1));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2a));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2a));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x3));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2a));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x3));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x1));
steps(&mut machine, 3);
assert_eq!(machine.get_tos(), Ok(0x2a));
}
#[test]
fn task4_complex_load() {
let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest2.ijvm").unwrap();
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2a));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x0));
steps(&mut machine, 2);
assert_eq!(machine.get_tos(), Ok(0x3));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x2a));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x0));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x3));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x4f));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x3));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x4b));
steps(&mut machine, 1);
assert_eq!(machine.get_tos(), Ok(0x3));
}
#[test]
fn task4_iteration_load() {
let rc = Rc::new(Mutex::new(Cursor::new(Vec::new())));
let mut machine = rustijvm::Machine::new_from_file("files/task4/LoadTest4.ijvm").unwrap();
machine.set_output(rc.clone());
machine.run().unwrap();
let mut out = rc.lock().unwrap();
let mut string = String::new();
out.seek(SeekFrom::Start(0)).unwrap();
out.read_to_string(&mut string).unwrap();
assert_eq!(string, "kjihgfedcbaabcd");
}
#[test]
fn task4_iinc() {
let mut machine = rustijvm::Machine::new_from_file("files/task4/IINCTest.ijvm").unwrap();
steps(&mut machine, 4);
assert_eq!(machine.cur_frame().get(0), Ok(0));
assert_eq!(machine.cur_frame().get(1), Ok(0));
steps(&mut machine, 1);
assert_eq!(machine.cur_frame().get(0), Ok(0));
steps(&mut machine, 1);
assert_eq!(machine.cur_frame().get(0), Ok(1));
steps(&mut machine, 1);
assert_eq!(machine.cur_frame().get(0), Ok(4));
steps(&mut machine, 1);
assert_eq!(machine.cur_frame().get(1), Ok(0));
steps(&mut machine, 1);
assert_eq!(machine.cur_frame().get(1), Ok(-1));
steps(&mut machine, 1);
assert_eq!(machine.cur_frame().get(1), Ok(-4));
}