More test cases

This commit is contained in:
able 2023-05-22 23:44:40 -05:00
parent 49a45d62c6
commit e53a5eb835
3 changed files with 51 additions and 15 deletions

View file

@ -7,14 +7,7 @@ pub mod tests;
use { use {
self::call_stack::CallStack, self::call_stack::CallStack,
crate::{ crate::{engine::call_stack::FnCall, memory, HaltStatus, RuntimeErrors},
bytecode::{
ops::{Operations::*, *},
types::*,
},
engine::call_stack::FnCall,
memory, HaltStatus, RuntimeErrors,
},
alloc::vec::Vec, alloc::vec::Vec,
config::EngineConfig, config::EngineConfig,
log::trace, log::trace,
@ -468,7 +461,7 @@ F5-F9 {:016X} {:016X} {:016X} {:016X} {:016X}",
} }
op_pair => { op_pair => {
panic!("OP Pair {} - {}", op_pair.0, op_pair.1); return Err(InvalidOpcodePair(op_pair.0, op_pair.1));
} }
} }

View file

@ -5,6 +5,14 @@ use {
RuntimeErrors::*, RuntimeErrors::*,
}; };
#[test]
fn invalid_program() {
let prog = vec![1, 23];
let mut eng = Engine::new(prog);
let ret = eng.run();
assert_eq!(ret, Err(InvalidOpcodePair(1, 23)));
}
#[test] #[test]
fn empty_program() { fn empty_program() {
let prog = vec![]; let prog = vec![];
@ -27,7 +35,7 @@ fn max_quantum_reached() {
#[test] #[test]
fn jump_out_of_bounds() { fn jump_out_of_bounds() {
use crate::engine::Operations::JUMP; use crate::bytecode::ops::Operations::JUMP;
let prog = vec![JUMP as u8, 0, 0, 0, 0, 0, 0, 1, 0]; let prog = vec![JUMP as u8, 0, 0, 0, 0, 0, 0, 1, 0];
let mut eng = Engine::new(prog); let mut eng = Engine::new(prog);
let ret = eng.run(); let ret = eng.run();
@ -44,7 +52,7 @@ fn invalid_system_call() {
#[test] #[test]
fn add_u8() { fn add_u8() {
use crate::engine::{Operations::ADD, SubTypes::EightBit}; use crate::bytecode::ops::{Operations::ADD, SubTypes::EightBit};
let prog = vec![ADD as u8, EightBit as u8, 1, 1, 0xA0]; let prog = vec![ADD as u8, EightBit as u8, 1, 1, 0xA0];
let mut eng = Engine::new(prog); let mut eng = Engine::new(prog);
@ -54,7 +62,7 @@ fn add_u8() {
#[test] #[test]
fn sub_u8() { fn sub_u8() {
use crate::engine::{Operations::SUB, SubTypes::EightBit}; use crate::bytecode::ops::{Operations::SUB, SubTypes::EightBit};
let prog = vec![SUB as u8, EightBit as u8, 2, 1, 0xA0]; let prog = vec![SUB as u8, EightBit as u8, 2, 1, 0xA0];
let mut eng = Engine::new(prog); let mut eng = Engine::new(prog);
@ -63,7 +71,7 @@ fn sub_u8() {
} }
#[test] #[test]
fn mul_u8() { fn mul_u8() {
use crate::engine::{Operations::MUL, SubTypes::EightBit}; use crate::bytecode::ops::{Operations::MUL, SubTypes::EightBit};
let prog = vec![MUL as u8, EightBit as u8, 1, 1, 0xA0]; let prog = vec![MUL as u8, EightBit as u8, 1, 1, 0xA0];
let mut eng = Engine::new(prog); let mut eng = Engine::new(prog);
@ -73,10 +81,45 @@ fn mul_u8() {
#[test] #[test]
fn div_u8() { fn div_u8() {
use crate::engine::{Operations::DIV, SubTypes::EightBit}; use crate::bytecode::ops::{Operations::DIV, SubTypes::EightBit};
let prog = vec![DIV as u8, EightBit as u8, 1, 1, 0xA0]; let prog = vec![DIV as u8, EightBit as u8, 1, 1, 0xA0];
let mut eng = Engine::new(prog); let mut eng = Engine::new(prog);
let _ = eng.run(); let _ = eng.run();
assert_eq!(eng.registers.a0, 2); assert_eq!(eng.registers.a0, 2);
} }
#[test]
fn set_register_8() {
let prog = alloc::vec![];
let mut eng = Engine::new(prog);
eng.set_register_8(0xA0, 1);
assert_eq!(eng.registers.a0, 1);
}
#[test]
fn set_register_64() {
let prog = alloc::vec![];
let mut eng = Engine::new(prog);
eng.set_register_64(0xD0, 1);
assert_eq!(eng.registers.d0, 1);
}
#[test]
fn load_u8() {
use crate::bytecode::ops::{Operations::LOAD, RWSubTypes::AddrToReg};
let prog = vec![LOAD as u8, AddrToReg as u8, 0, 0, 0, 0, 0, 0, 1, 0, 0xA0];
let mut eng = Engine::new(prog);
let ret = eng.memory.set_addr8(256, 1);
assert_eq!(ret, Ok(()));
let _ = eng.run();
assert_eq!(eng.registers.a0, 1);
}
#[test]
fn set_memory_8() {
let prog = vec![];
let mut eng = Engine::new(prog);
let ret = eng.memory.set_addr8(256, 1);
assert_eq!(ret, Ok(()));
}

View file

@ -7,7 +7,7 @@ pub mod memory;
#[derive(Debug, PartialEq)] #[derive(Debug, PartialEq)]
pub enum RuntimeErrors { pub enum RuntimeErrors {
InvalidOpcode(u8), InvalidOpcodePair(u8, u8),
RegisterTooSmall, RegisterTooSmall,
HostError(u64), HostError(u64),
PageNotMapped(u64), PageNotMapped(u64),