Files
RustIJVM/tests/advanced1.rs

241 lines
6.7 KiB
Rust

extern crate rustijvm;
use std::io::{Seek, SeekFrom, Read};
fn steps(machine: &mut rustijvm::Machine, num: usize) {
for _ in 0..num {
machine.step().unwrap();
}
}
#[test]
fn advanced1() {
let output = rustijvm::stubs::output_stub();
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);
}