cge_nes 0.1.2

Cycle-accurate NES (Nintendo Entertainment System) emulator library: CPU, PPU, cartridge, input, and iNES ROM loading.
Documentation
use super::*;

#[test]
fn oamarray_write_readcorrect() {
    let mut data = [Entry::default(); 64];
    let mut oam = OamArray::new();

    for entry in data.iter_mut().enumerate() {
        entry.1.set_y(entry.0 as u8);
        entry.1.set_tile_num(((entry.0 + 1) as u8).into());
        entry
            .1
            .set_attributes(entry::Attributes::from_bits_truncate(entry.0 as u8 + 2));
        entry.1.set_x(entry.0 as u8 + 3);

        let base_addr = (entry.0 as u8) << 2;
        oam.write_data(base_addr + 0, entry.1.y());
        oam.write_data(base_addr + 1, entry.1.tile_num().into());
        oam.write_data(base_addr + 2, entry.1.attributes().bits());
        oam.write_data(base_addr + 3, entry.1.x());
    }

    for entry in data.iter().enumerate() {
        assert_eq!(entry.1.y(), oam.y(entry.0 as u8));
        assert_eq!(entry.1.tile_num(), oam.tile_number(entry.0 as u8));
        assert_eq!(entry.1.attributes(), oam.attributes(entry.0 as u8));
        assert_eq!(entry.1.x(), oam.x(entry.0 as u8));
    }
}