use rand::random; use gemma::chip8::registers::Chip8Registers; #[test] fn register_rw_test() { let mut x = Chip8Registers::default(); x.poke(0x0, 0xff); x.poke(0x1, 0xab); assert_eq!(x.peek(0x0), 0xff); assert_eq!(x.peek(0x1), 0xab); } #[test] fn pc_test() { let mut x = Chip8Registers::default(); x.set_pc(0x300); assert_eq!(x.peek_pc(), 0x300); } #[test] #[should_panic] fn invalid_register() { let mut x = Chip8Registers::default(); x.poke(0x10, 0xff); } #[test] fn reset_clears_registers() { let mut x = Chip8Registers::default(); for register in 0..0x10 { x.poke(register, random::()); } x.reset(); for register in 0..0x10 { assert_eq!(x.peek(register), 0x00); } } #[test] fn registers_equality() { let data_set: Vec<(Chip8Registers, Chip8Registers, bool)> = vec![ (Chip8Registers::default(), Chip8Registers::default(), true), ( Chip8Registers { registers: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], i_register: 0, pc: 0, }, Chip8Registers { registers: [ 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ], i_register: 0, pc: 0, }, false, ), ]; for (first, second, matches) in data_set.iter() { assert_eq!(first == second, *matches) } }