Most tests yay
This commit is contained in:
242
tests/advanced1.rs
Normal file
242
tests/advanced1.rs
Normal file
@@ -0,0 +1,242 @@
|
||||
extern crate rustijvm;
|
||||
|
||||
use std::rc::Rc;
|
||||
use std::sync::Mutex;
|
||||
use std::io::{Cursor, Seek, SeekFrom, Read};
|
||||
|
||||
fn steps(machine: &mut rustijvm::Machine, num: usize) {
|
||||
for _ in 0..num {
|
||||
machine.step().unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn advanced1() {
|
||||
let output: Rc<Mutex<Cursor<Vec<u8>>>> = Rc::new(Mutex::new(Cursor::new(Vec::new())));
|
||||
let input = Box::new("A".as_bytes());
|
||||
let mut machine = rustijvm::Machine::new_from_file("files/task5/all_regular.ijvm").unwrap();
|
||||
machine.set_input(input);
|
||||
machine.set_output(output.clone());
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(16));
|
||||
|
||||
assert_eq!(0x59, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(16));
|
||||
|
||||
assert_eq!(0xa7, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x60, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(32));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(33));
|
||||
|
||||
assert_eq!(0x7e, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(32));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(1));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(2));
|
||||
|
||||
assert_eq!(0xB0, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(3));
|
||||
|
||||
assert_eq!(0x64, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(29));
|
||||
|
||||
assert_eq!(0x00, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(29));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(68));
|
||||
|
||||
assert_eq!(0x60, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(97));
|
||||
|
||||
assert_eq!(0xFD, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
{
|
||||
let mut outstream = output.lock().unwrap();
|
||||
outstream.seek(SeekFrom::Start(0)).unwrap();
|
||||
let mut buf = [0; 1];
|
||||
outstream.read_exact(&mut buf).unwrap();
|
||||
assert_eq!(buf[0], 'a' as u8);
|
||||
}
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(0));
|
||||
|
||||
assert_eq!(0x99, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(-22));
|
||||
|
||||
assert_eq!(0x9B, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x13, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(65));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(0x41));
|
||||
|
||||
assert_eq!(0x9F, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(1));
|
||||
|
||||
assert_eq!(0x36, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(1));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x84, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(2));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0xFC, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok('A' as i32));
|
||||
|
||||
assert_eq!(0xFC, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(0));
|
||||
|
||||
assert_eq!(0x99, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(0));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(1));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(2));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(3));
|
||||
|
||||
assert_eq!(0xB6, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(1));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(2));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(3));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(0));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(5));
|
||||
|
||||
assert_eq!(0xB6, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(10));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(0));
|
||||
|
||||
assert_eq!(0x10, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(1));
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(5));
|
||||
|
||||
assert_eq!(0xB6, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0x15, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(5));
|
||||
|
||||
assert_eq!(0xAC, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(5));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(10));
|
||||
|
||||
assert_eq!(0xAC, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(10));
|
||||
|
||||
assert_eq!(0x00, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0xAC, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
assert_eq!(machine.get_tos(), Ok(10));
|
||||
|
||||
assert_eq!(0x57, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
|
||||
assert_eq!(0xFF, machine.cur_instruction());
|
||||
steps(&mut machine, 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user