Unittests on the stack; fix byte order & round-tripping
This commit is contained in:
parent
670b656410
commit
518a71d24a
1 changed files with 83 additions and 1 deletions
84
src/stack.rs
84
src/stack.rs
|
@ -34,7 +34,7 @@ impl Stack {
|
|||
if self.idx > 254 {
|
||||
Err(StackError::StackOverflow)
|
||||
} else {
|
||||
val.to_le_bytes().map(|x| self.push1(x).ok());
|
||||
val.to_be_bytes().map(|x| self.push1(x).ok());
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
@ -63,6 +63,7 @@ impl Stack {
|
|||
} else {
|
||||
let high = self.buff[idx as usize] as u16;
|
||||
let low = self.buff[(idx + 1) as usize] as u16;
|
||||
println!("idx {}; high {:#02x}; low {:#02x};", idx, high, low);
|
||||
Ok((high << 8) + low)
|
||||
}
|
||||
}
|
||||
|
@ -91,3 +92,84 @@ impl Stack {
|
|||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod stack_test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_push_pop() {
|
||||
let mut s = Stack::new();
|
||||
match s.push1(0xFF) {
|
||||
Ok(()) => (),
|
||||
Err(_) => assert!(false, "pushing stack of size 0 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 1);
|
||||
|
||||
match s.peek1() {
|
||||
Ok(val) => assert_eq!(val, 0xFF),
|
||||
Err(_) => assert!(false, "popping stack of size 1 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 1);
|
||||
|
||||
match s.pop1() {
|
||||
Ok(val) => assert_eq!(val, 0xFF),
|
||||
Err(_) => assert!(false, "popping stack of size 1 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_push2_pop2() {
|
||||
let mut s = Stack::new();
|
||||
match s.push2(0xFF00) {
|
||||
Ok(()) => (),
|
||||
Err(_) => assert!(false, "pushing stack of size 0 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 2);
|
||||
|
||||
match s.peek2() {
|
||||
Ok(val) => assert_eq!(val, 0xFF00),
|
||||
Err(_) => assert!(false, "peek2 stack of size 2 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 2);
|
||||
|
||||
match s.pop2() {
|
||||
Ok(val) => assert_eq!(val, 0xFF00),
|
||||
Err(_) => assert!(false, "peek2 stack of size 2 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_push2_pop1_pop1() {
|
||||
let mut s = Stack::new();
|
||||
match s.push2(0xFF00) {
|
||||
Ok(()) => (),
|
||||
Err(_) => assert!(false, "pushing stack of size 0 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 2);
|
||||
|
||||
match s.pop1() {
|
||||
Ok(val) => assert_eq!(val, 0x00),
|
||||
Err(_) => assert!(false, "peek1 stack of size 2 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 1);
|
||||
|
||||
match s.pop1() {
|
||||
Ok(val) => assert_eq!(val, 0xFF),
|
||||
Err(_) => assert!(false, "peek1 stack of size 2 errored"),
|
||||
}
|
||||
assert_eq!(s.idx, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_pop_empty() {
|
||||
let mut s = Stack::new();
|
||||
match s.pop1() {
|
||||
Ok(_) => assert!(false, "popping stack of size 0 succeeded"),
|
||||
Err(StackError::StackUnderflow) => (),
|
||||
Err(_) => assert!(false, "poppoing stack of size 0 didn't underflow"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue