From f1c8c9a683935990cd0c42a50585254c5c63e4b7 Mon Sep 17 00:00:00 2001 From: Trevor Merritt Date: Fri, 4 Oct 2024 14:55:06 -0400 Subject: [PATCH] peek/poke tests --- emma/src/chip8/video.rs | 73 ++++++++++++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 11 deletions(-) diff --git a/emma/src/chip8/video.rs b/emma/src/chip8/video.rs index 96844b3..70ef5af 100644 --- a/emma/src/chip8/video.rs +++ b/emma/src/chip8/video.rs @@ -28,6 +28,7 @@ impl Chip8Video { } pub fn poke(&mut self, address: u16, new_value: bool) -> Self { + println!("POKING {new_value} AT {address}"); self.memory[address as usize] = new_value; self.to_owned() } @@ -64,10 +65,6 @@ impl Chip8Video { output } - pub fn dump_to_console(self) { - println!("{}", self.format_as_string()); - } - pub fn write_sprite(&mut self, sprite_data: Vec, origin: (u8, u8)) { debug!("Writing [{:?}] at [{}]x[{}]", sprite_data, origin.0, origin.1); } @@ -206,14 +203,68 @@ mod test { 0b01010101 ]; - for to_poke_index in to_poke.iter() { - for current_to_poke_bit_index in 0..8 { - let right_shifted_bit = to_poke[*to_poke_index as usize] >> current_to_poke_bit_index; - let offset = to_poke_index * 8 + current_to_poke_bit_index; - v.poke(offset, is_bit_set(to_poke[*to_poke_index as usize] as u8, current_to_poke_bit_index as u8)); - } + for (byte_in_set, byte_to_poke) in to_poke.iter().enumerate() { + let base_offset = byte_in_set * 64; + v.poke_byte(base_offset as u16, *byte_to_poke); } - assert!(false); + + // row 2 column 1 + { + assert!(v.peek(0x40)); + assert!(v.peek(0x41)); + assert!(v.peek(0x42)); + assert!(v.peek(0x43)); + assert!(v.peek(0x44)); + assert!(v.peek(0x45)); + assert!(v.peek(0x46)); + assert!(v.peek(0x47)); + + // row 3 column 1 + assert!(!v.peek(0xC0)); + assert!(v.peek(0xC1)); + assert!(!v.peek(0xC2)); + assert!(v.peek(0xC3)); + assert!(!v.peek(0xC4)); + assert!(v.peek(0xC5)); + assert!(!v.peek(0xC6)); + assert!(v.peek(0xC7)); + } + } + + #[test] + fn moved_poke_test() { + let mut v = Chip8Video::default(); + let to_poke = [ + 0b00000000, + 0b11111111, + 0b10101010, + 0b01010101 + ]; + + let x_offset = 20; + let y_offset = 5; + + + for (byte_in_set, byte_to_poke) in to_poke.iter().enumerate() { + let base_offset = (x_offset + byte_in_set) * 64 + y_offset; + v.poke_byte(base_offset as u16, *byte_to_poke); + } + + let test_offset = (x_offset * 64 + y_offset) as u16; + assert!(v.peek(test_offset)); + assert!(v.peek(test_offset + 1)); + assert!(v.peek(test_offset + 2)); + assert!(v.peek(test_offset + 3)); + assert!(v.peek(test_offset + 4)); + assert!(v.peek(test_offset + 5)); + assert!(v.peek(test_offset + 6)); + assert!(v.peek(test_offset + 7)); + + } + + #[test] + fn write_sprite_test() { + } }