diff --git a/src/system/nes/conformance/apu.zig b/src/system/nes/conformance/apu.zig index a4661fe..1e11f6d 100644 --- a/src/system/nes/conformance/apu.zig +++ b/src/system/nes/conformance/apu.zig @@ -1,55 +1,157 @@ -// ponytail: 1-line APU conformance test suite +// 1-line APU conformance test suite const testing = @import("std").testing; const helpers = @import("helpers.zig"); -test "conformance: apu - 01.len_ctr" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_apu_2005.07.30/01.len_ctr.nes", 60)).bus.ppu.framebuffer) > 50); } -test "conformance: apu - 02.len_table" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_apu_2005.07.30/02.len_table.nes", 60)).bus.ppu.framebuffer) > 50); } -test "conformance: apu - 03.irq_flag" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_apu_2005.07.30/03.irq_flag.nes", 60)).bus.ppu.framebuffer) > 50); } -test "conformance: apu - 04.clock_jitter" { _ = try helpers.runRom("blargg_apu_2005.07.30/04.clock_jitter.nes", 60); } -test "conformance: apu - 05.len_timing_mode0" { _ = try helpers.runRom("blargg_apu_2005.07.30/05.len_timing_mode0.nes", 60); } -test "conformance: apu - 06.len_timing_mode1" { _ = try helpers.runRom("blargg_apu_2005.07.30/06.len_timing_mode1.nes", 60); } -test "conformance: apu - 07.irq_flag_timing" { _ = try helpers.runRom("blargg_apu_2005.07.30/07.irq_flag_timing.nes", 60); } -test "conformance: apu - 08.irq_timing" { _ = try helpers.runRom("blargg_apu_2005.07.30/08.irq_timing.nes", 60); } -test "conformance: apu - 09.reset_timing" { _ = try helpers.runRom("blargg_apu_2005.07.30/09.reset_timing.nes", 60); } -test "conformance: apu - 10.len_halt_timing" { _ = try helpers.runRom("blargg_apu_2005.07.30/10.len_halt_timing.nes", 60); } -test "conformance: apu - 11.len_reload_timing" { _ = try helpers.runRom("blargg_apu_2005.07.30/11.len_reload_timing.nes", 60); } -test "conformance: apu - apu_reset 4015" { _ = try helpers.runRom("apu_reset/4015_cleared.nes", 60); } -test "conformance: apu - apu_reset 4017_timing" { _ = try helpers.runRom("apu_reset/4017_timing.nes", 60); } -test "conformance: apu - apu_reset 4017_written" { _ = try helpers.runRom("apu_reset/4017_written.nes", 60); } -test "conformance: apu - apu_reset irq_flag_cleared" { _ = try helpers.runRom("apu_reset/irq_flag_cleared.nes", 60); } -test "conformance: apu - apu_reset len_ctrs_enabled" { _ = try helpers.runRom("apu_reset/len_ctrs_enabled.nes", 60); } -test "conformance: apu - apu_reset works_immediately" { _ = try helpers.runRom("apu_reset/works_immediately.nes", 60); } -test "conformance: apu - apu_test" { _ = try helpers.runRom("apu_test/apu_test.nes", 60); } -test "conformance: apu - apu_test 1-len_ctr" { _ = try helpers.runRom("apu_test/rom_singles/1-len_ctr.nes", 60); } -test "conformance: apu - apu_test 2-len_table" { _ = try helpers.runRom("apu_test/rom_singles/2-len_table.nes", 60); } -test "conformance: apu - apu_test 3-irq_flag" { _ = try helpers.runRom("apu_test/rom_singles/3-irq_flag.nes", 60); } -test "conformance: apu - apu_test 4-jitter" { _ = try helpers.runRom("apu_test/rom_singles/4-jitter.nes", 60); } -test "conformance: apu - apu_test 5-len_timing" { _ = try helpers.runRom("apu_test/rom_singles/5-len_timing.nes", 60); } -test "conformance: apu - apu_test 6-irq_flag_timing" { _ = try helpers.runRom("apu_test/rom_singles/6-irq_flag_timing.nes", 60); } -test "conformance: apu - apu_test 7-dmc_basics" { _ = try helpers.runRom("apu_test/rom_singles/7-dmc_basics.nes", 60); } -test "conformance: apu - apu_test 8-dmc_rates" { _ = try helpers.runRom("apu_test/rom_singles/8-dmc_rates.nes", 60); } -test "conformance: apu - dmc buffer_retained" { _ = try helpers.runRom("dmc_tests/buffer_retained.nes", 60); } -test "conformance: apu - dmc latency" { _ = try helpers.runRom("dmc_tests/latency.nes", 60); } -test "conformance: apu - dmc status" { _ = try helpers.runRom("dmc_tests/status.nes", 60); } -test "conformance: apu - dmc status_irq" { _ = try helpers.runRom("dmc_tests/status_irq.nes", 60); } -test "conformance: apu - dmc_dma 2007_read" { _ = try helpers.runRom("dmc_dma_during_read4/dma_2007_read.nes", 60); } -test "conformance: apu - dmc_dma 2007_write" { _ = try helpers.runRom("dmc_dma_during_read4/dma_2007_write.nes", 60); } -test "conformance: apu - dmc_dma 4016_read" { _ = try helpers.runRom("dmc_dma_during_read4/dma_4016_read.nes", 60); } -test "conformance: apu - dmc_dma double_2007_read" { _ = try helpers.runRom("dmc_dma_during_read4/double_2007_read.nes", 60); } -test "conformance: apu - dmc_dma read_write_2007" { _ = try helpers.runRom("dmc_dma_during_read4/read_write_2007.nes", 60); } -test "conformance: apu - sprdma_and_dmc_dma" { _ = try helpers.runRom("sprdma_and_dmc_dma/sprdma_and_dmc_dma.nes", 60); } -test "conformance: apu - apu_mixer square" { _ = try helpers.runRom("apu_mixer/square.nes", 60); } -test "conformance: apu - apu_mixer triangle" { _ = try helpers.runRom("apu_mixer/triangle.nes", 60); } -test "conformance: apu - apu_mixer noise" { _ = try helpers.runRom("apu_mixer/noise.nes", 60); } -test "conformance: apu - apu_mixer dmc" { _ = try helpers.runRom("apu_mixer/dmc.nes", 60); } -test "conformance: apu - volumes" { _ = try helpers.runRom("volume_tests/volumes.nes", 60); } -test "conformance: apu - pal_apu 01.len_ctr" { _ = try helpers.runRom("pal_apu_tests/01.len_ctr.nes", 60); } -test "conformance: apu - pal_apu 02.len_table" { _ = try helpers.runRom("pal_apu_tests/02.len_table.nes", 60); } -test "conformance: apu - pal_apu 03.irq_flag" { _ = try helpers.runRom("pal_apu_tests/03.irq_flag.nes", 60); } -test "conformance: apu - pal_apu 04.clock_jitter" { _ = try helpers.runRom("pal_apu_tests/04.clock_jitter.nes", 60); } -test "conformance: apu - pal_apu 05.len_timing_mode0" { _ = try helpers.runRom("pal_apu_tests/05.len_timing_mode0.nes", 60); } -test "conformance: apu - pal_apu 06.len_timing_mode1" { _ = try helpers.runRom("pal_apu_tests/06.len_timing_mode1.nes", 60); } -test "conformance: apu - pal_apu 07.irq_flag_timing" { _ = try helpers.runRom("pal_apu_tests/07.irq_flag_timing.nes", 60); } -test "conformance: apu - pal_apu 08.irq_timing" { _ = try helpers.runRom("pal_apu_tests/08.irq_timing.nes", 60); } -test "conformance: apu - pal_apu 10.len_halt_timing" { _ = try helpers.runRom("pal_apu_tests/10.len_halt_timing.nes", 60); } -test "conformance: apu - pal_apu 11.len_reload_timing" { _ = try helpers.runRom("pal_apu_tests/11.len_reload_timing.nes", 60); } +test "conformance: apu - 01.len_ctr" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_apu_2005.07.30/01.len_ctr.nes", 60)).bus.ppu.framebuffer) > 50); +} +test "conformance: apu - 02.len_table" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_apu_2005.07.30/02.len_table.nes", 60)).bus.ppu.framebuffer) > 50); +} +test "conformance: apu - 03.irq_flag" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_apu_2005.07.30/03.irq_flag.nes", 60)).bus.ppu.framebuffer) > 50); +} +test "conformance: apu - 04.clock_jitter" { + _ = try helpers.runRom("blargg_apu_2005.07.30/04.clock_jitter.nes", 60); +} +test "conformance: apu - 05.len_timing_mode0" { + _ = try helpers.runRom("blargg_apu_2005.07.30/05.len_timing_mode0.nes", 60); +} +test "conformance: apu - 06.len_timing_mode1" { + _ = try helpers.runRom("blargg_apu_2005.07.30/06.len_timing_mode1.nes", 60); +} +test "conformance: apu - 07.irq_flag_timing" { + _ = try helpers.runRom("blargg_apu_2005.07.30/07.irq_flag_timing.nes", 60); +} +test "conformance: apu - 08.irq_timing" { + _ = try helpers.runRom("blargg_apu_2005.07.30/08.irq_timing.nes", 60); +} +test "conformance: apu - 09.reset_timing" { + _ = try helpers.runRom("blargg_apu_2005.07.30/09.reset_timing.nes", 60); +} +test "conformance: apu - 10.len_halt_timing" { + _ = try helpers.runRom("blargg_apu_2005.07.30/10.len_halt_timing.nes", 60); +} +test "conformance: apu - 11.len_reload_timing" { + _ = try helpers.runRom("blargg_apu_2005.07.30/11.len_reload_timing.nes", 60); +} +test "conformance: apu - apu_reset 4015" { + _ = try helpers.runRom("apu_reset/4015_cleared.nes", 60); +} +test "conformance: apu - apu_reset 4017_timing" { + _ = try helpers.runRom("apu_reset/4017_timing.nes", 60); +} +test "conformance: apu - apu_reset 4017_written" { + _ = try helpers.runRom("apu_reset/4017_written.nes", 60); +} +test "conformance: apu - apu_reset irq_flag_cleared" { + _ = try helpers.runRom("apu_reset/irq_flag_cleared.nes", 60); +} +test "conformance: apu - apu_reset len_ctrs_enabled" { + _ = try helpers.runRom("apu_reset/len_ctrs_enabled.nes", 60); +} +test "conformance: apu - apu_reset works_immediately" { + _ = try helpers.runRom("apu_reset/works_immediately.nes", 60); +} +test "conformance: apu - apu_test" { + _ = try helpers.runRom("apu_test/apu_test.nes", 60); +} +test "conformance: apu - apu_test 1-len_ctr" { + _ = try helpers.runRom("apu_test/rom_singles/1-len_ctr.nes", 60); +} +test "conformance: apu - apu_test 2-len_table" { + _ = try helpers.runRom("apu_test/rom_singles/2-len_table.nes", 60); +} +test "conformance: apu - apu_test 3-irq_flag" { + _ = try helpers.runRom("apu_test/rom_singles/3-irq_flag.nes", 60); +} +test "conformance: apu - apu_test 4-jitter" { + _ = try helpers.runRom("apu_test/rom_singles/4-jitter.nes", 60); +} +test "conformance: apu - apu_test 5-len_timing" { + _ = try helpers.runRom("apu_test/rom_singles/5-len_timing.nes", 60); +} +test "conformance: apu - apu_test 6-irq_flag_timing" { + _ = try helpers.runRom("apu_test/rom_singles/6-irq_flag_timing.nes", 60); +} +test "conformance: apu - apu_test 7-dmc_basics" { + _ = try helpers.runRom("apu_test/rom_singles/7-dmc_basics.nes", 60); +} +test "conformance: apu - apu_test 8-dmc_rates" { + _ = try helpers.runRom("apu_test/rom_singles/8-dmc_rates.nes", 60); +} +test "conformance: apu - dmc buffer_retained" { + _ = try helpers.runRom("dmc_tests/buffer_retained.nes", 60); +} +test "conformance: apu - dmc latency" { + _ = try helpers.runRom("dmc_tests/latency.nes", 60); +} +test "conformance: apu - dmc status" { + _ = try helpers.runRom("dmc_tests/status.nes", 60); +} +test "conformance: apu - dmc status_irq" { + _ = try helpers.runRom("dmc_tests/status_irq.nes", 60); +} +test "conformance: apu - dmc_dma 2007_read" { + _ = try helpers.runRom("dmc_dma_during_read4/dma_2007_read.nes", 60); +} +test "conformance: apu - dmc_dma 2007_write" { + _ = try helpers.runRom("dmc_dma_during_read4/dma_2007_write.nes", 60); +} +test "conformance: apu - dmc_dma 4016_read" { + _ = try helpers.runRom("dmc_dma_during_read4/dma_4016_read.nes", 60); +} +test "conformance: apu - dmc_dma double_2007_read" { + _ = try helpers.runRom("dmc_dma_during_read4/double_2007_read.nes", 60); +} +test "conformance: apu - dmc_dma read_write_2007" { + _ = try helpers.runRom("dmc_dma_during_read4/read_write_2007.nes", 60); +} +test "conformance: apu - sprdma_and_dmc_dma" { + _ = try helpers.runRom("sprdma_and_dmc_dma/sprdma_and_dmc_dma.nes", 60); +} +test "conformance: apu - apu_mixer square" { + _ = try helpers.runRom("apu_mixer/square.nes", 60); +} +test "conformance: apu - apu_mixer triangle" { + _ = try helpers.runRom("apu_mixer/triangle.nes", 60); +} +test "conformance: apu - apu_mixer noise" { + _ = try helpers.runRom("apu_mixer/noise.nes", 60); +} +test "conformance: apu - apu_mixer dmc" { + _ = try helpers.runRom("apu_mixer/dmc.nes", 60); +} +test "conformance: apu - volumes" { + _ = try helpers.runRom("volume_tests/volumes.nes", 60); +} +test "conformance: apu - pal_apu 01.len_ctr" { + _ = try helpers.runRom("pal_apu_tests/01.len_ctr.nes", 60); +} +test "conformance: apu - pal_apu 02.len_table" { + _ = try helpers.runRom("pal_apu_tests/02.len_table.nes", 60); +} +test "conformance: apu - pal_apu 03.irq_flag" { + _ = try helpers.runRom("pal_apu_tests/03.irq_flag.nes", 60); +} +test "conformance: apu - pal_apu 04.clock_jitter" { + _ = try helpers.runRom("pal_apu_tests/04.clock_jitter.nes", 60); +} +test "conformance: apu - pal_apu 05.len_timing_mode0" { + _ = try helpers.runRom("pal_apu_tests/05.len_timing_mode0.nes", 60); +} +test "conformance: apu - pal_apu 06.len_timing_mode1" { + _ = try helpers.runRom("pal_apu_tests/06.len_timing_mode1.nes", 60); +} +test "conformance: apu - pal_apu 07.irq_flag_timing" { + _ = try helpers.runRom("pal_apu_tests/07.irq_flag_timing.nes", 60); +} +test "conformance: apu - pal_apu 08.irq_timing" { + _ = try helpers.runRom("pal_apu_tests/08.irq_timing.nes", 60); +} +test "conformance: apu - pal_apu 10.len_halt_timing" { + _ = try helpers.runRom("pal_apu_tests/10.len_halt_timing.nes", 60); +} +test "conformance: apu - pal_apu 11.len_reload_timing" { + _ = try helpers.runRom("pal_apu_tests/11.len_reload_timing.nes", 60); +} diff --git a/src/system/nes/conformance/cpu.zig b/src/system/nes/conformance/cpu.zig index b2716f8..61f10d9 100644 --- a/src/system/nes/conformance/cpu.zig +++ b/src/system/nes/conformance/cpu.zig @@ -1,44 +1,124 @@ -// ponytail: 1-line CPU conformance test suite +// 1-line CPU conformance test suite const testing = @import("std").testing; const helpers = @import("helpers.zig"); -test "conformance: cpu - instr_test_v5 official_only" { _ = try helpers.runRom("instr_test-v5/official_only.nes", 60); } -test "conformance: cpu - instr_test_v5 all_instrs" { _ = try helpers.runRom("instr_test-v5/all_instrs.nes", 60); } -test "conformance: cpu - instr_test_v5 01-basics" { _ = try helpers.runRom("instr_test-v5/rom_singles/01-basics.nes", 60); } -test "conformance: cpu - instr_test_v5 02-implied" { _ = try helpers.runRom("instr_test-v5/rom_singles/02-implied.nes", 60); } -test "conformance: cpu - instr_test_v5 03-immediate" { _ = try helpers.runRom("instr_test-v5/rom_singles/03-immediate.nes", 60); } -test "conformance: cpu - instr_test_v5 04-zero_page" { _ = try helpers.runRom("instr_test-v5/rom_singles/04-zero_page.nes", 60); } -test "conformance: cpu - instr_test_v5 05-zp_xy" { _ = try helpers.runRom("instr_test-v5/rom_singles/05-zp_xy.nes", 60); } -test "conformance: cpu - instr_test_v5 06-absolute" { _ = try helpers.runRom("instr_test-v5/rom_singles/06-absolute.nes", 60); } -test "conformance: cpu - instr_test_v5 07-abs_xy" { _ = try helpers.runRom("instr_test-v5/rom_singles/07-abs_xy.nes", 60); } -test "conformance: cpu - instr_test_v5 08-ind_x" { _ = try helpers.runRom("instr_test-v5/rom_singles/08-ind_x.nes", 60); } -test "conformance: cpu - instr_test_v5 09-ind_y" { _ = try helpers.runRom("instr_test-v5/rom_singles/09-ind_y.nes", 60); } -test "conformance: cpu - instr_test_v5 10-branches" { _ = try helpers.runRom("instr_test-v5/rom_singles/10-branches.nes", 60); } -test "conformance: cpu - instr_test_v5 11-stack" { _ = try helpers.runRom("instr_test-v5/rom_singles/11-stack.nes", 60); } -test "conformance: cpu - instr_test_v5 12-jmp_jsr" { _ = try helpers.runRom("instr_test-v5/rom_singles/12-jmp_jsr.nes", 60); } -test "conformance: cpu - instr_test_v5 13-rts" { _ = try helpers.runRom("instr_test-v5/rom_singles/13-rts.nes", 60); } -test "conformance: cpu - instr_test_v5 14-rti" { _ = try helpers.runRom("instr_test-v5/rom_singles/14-rti.nes", 60); } -test "conformance: cpu - instr_test_v5 15-brk" { _ = try helpers.runRom("instr_test-v5/rom_singles/15-brk.nes", 60); } -test "conformance: cpu - instr_test_v5 16-special" { _ = try helpers.runRom("instr_test-v5/rom_singles/16-special.nes", 60); } -test "conformance: cpu - branch_timing 1.branch_basics" { _ = try helpers.runRom("branch_timing_tests/1.branch_basics.nes", 60); } -test "conformance: cpu - branch_timing 2.backward_branch" { _ = try helpers.runRom("branch_timing_tests/2.backward_branch.nes", 60); } -test "conformance: cpu - branch_timing 3.forward_branch" { _ = try helpers.runRom("branch_timing_tests/3.forward_branch.nes", 60); } -test "conformance: cpu - cpu_dummy_reads" { _ = try helpers.runRom("cpu_dummy_reads/cpu_dummy_reads.nes", 60); } -test "conformance: cpu - cpu_dummy_writes oam" { _ = try helpers.runRom("cpu_dummy_writes/cpu_dummy_writes_oam.nes", 60); } -test "conformance: cpu - cpu_dummy_writes ppumem" { _ = try helpers.runRom("cpu_dummy_writes/cpu_dummy_writes_ppumem.nes", 60); } -test "conformance: cpu - cpu_timing_test6" { _ = try helpers.runRom("cpu_timing_test6/cpu_timing_test.nes", 60); } -test "conformance: cpu - cpu_reset ram_after_reset" { _ = try helpers.runRom("cpu_reset/ram_after_reset.nes", 60); } -test "conformance: cpu - cpu_reset registers" { _ = try helpers.runRom("cpu_reset/registers.nes", 60); } -test "conformance: cpu - cpu_interrupts_v2 main" { _ = try helpers.runRom("cpu_interrupts_v2/cpu_interrupts.nes", 60); } -test "conformance: cpu - cpu_interrupts_v2 cli_latency" { _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/1-cli_latency.nes", 60); } -test "conformance: cpu - cpu_interrupts_v2 nmi_and_brk" { _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/2-nmi_and_brk.nes", 60); } -test "conformance: cpu - cpu_interrupts_v2 nmi_and_irq" { _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/3-nmi_and_irq.nes", 60); } -test "conformance: cpu - cpu_interrupts_v2 irq_and_dma" { _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/4-irq_and_dma.nes", 60); } -test "conformance: cpu - cpu_interrupts_v2 branch_delays_irq" { _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/5-branch_delays_irq.nes", 60); } -test "conformance: cpu - cpu_test5 official" { _ = try helpers.runRom("blargg_nes_cpu_test5/official.nes", 60); } -test "conformance: cpu - cpu_test5 full" { _ = try helpers.runRom("blargg_nes_cpu_test5/cpu.nes", 60); } -test "conformance: cpu - instr_timing" { _ = try helpers.runRom("instr_timing/instr_timing.nes", 60); } -test "conformance: cpu - instr_timing 1-instr_timing" { _ = try helpers.runRom("instr_timing/rom_singles/1-instr_timing.nes", 60); } -test "conformance: cpu - instr_timing 2-branch_timing" { _ = try helpers.runRom("instr_timing/rom_singles/2-branch_timing.nes", 60); } -test "conformance: cpu - exec_space apu" { _ = try helpers.runRom("cpu_exec_space/test_cpu_exec_space_apu.nes", 60); } -test "conformance: cpu - exec_space ppuio" { _ = try helpers.runRom("cpu_exec_space/test_cpu_exec_space_ppuio.nes", 60); } +test "conformance: cpu - instr_test_v5 official_only" { + _ = try helpers.runRom("instr_test-v5/official_only.nes", 60); +} +test "conformance: cpu - instr_test_v5 all_instrs" { + _ = try helpers.runRom("instr_test-v5/all_instrs.nes", 60); +} +test "conformance: cpu - instr_test_v5 01-basics" { + _ = try helpers.runRom("instr_test-v5/rom_singles/01-basics.nes", 60); +} +test "conformance: cpu - instr_test_v5 02-implied" { + _ = try helpers.runRom("instr_test-v5/rom_singles/02-implied.nes", 60); +} +test "conformance: cpu - instr_test_v5 03-immediate" { + _ = try helpers.runRom("instr_test-v5/rom_singles/03-immediate.nes", 60); +} +test "conformance: cpu - instr_test_v5 04-zero_page" { + _ = try helpers.runRom("instr_test-v5/rom_singles/04-zero_page.nes", 60); +} +test "conformance: cpu - instr_test_v5 05-zp_xy" { + _ = try helpers.runRom("instr_test-v5/rom_singles/05-zp_xy.nes", 60); +} +test "conformance: cpu - instr_test_v5 06-absolute" { + _ = try helpers.runRom("instr_test-v5/rom_singles/06-absolute.nes", 60); +} +test "conformance: cpu - instr_test_v5 07-abs_xy" { + _ = try helpers.runRom("instr_test-v5/rom_singles/07-abs_xy.nes", 60); +} +test "conformance: cpu - instr_test_v5 08-ind_x" { + _ = try helpers.runRom("instr_test-v5/rom_singles/08-ind_x.nes", 60); +} +test "conformance: cpu - instr_test_v5 09-ind_y" { + _ = try helpers.runRom("instr_test-v5/rom_singles/09-ind_y.nes", 60); +} +test "conformance: cpu - instr_test_v5 10-branches" { + _ = try helpers.runRom("instr_test-v5/rom_singles/10-branches.nes", 60); +} +test "conformance: cpu - instr_test_v5 11-stack" { + _ = try helpers.runRom("instr_test-v5/rom_singles/11-stack.nes", 60); +} +test "conformance: cpu - instr_test_v5 12-jmp_jsr" { + _ = try helpers.runRom("instr_test-v5/rom_singles/12-jmp_jsr.nes", 60); +} +test "conformance: cpu - instr_test_v5 13-rts" { + _ = try helpers.runRom("instr_test-v5/rom_singles/13-rts.nes", 60); +} +test "conformance: cpu - instr_test_v5 14-rti" { + _ = try helpers.runRom("instr_test-v5/rom_singles/14-rti.nes", 60); +} +test "conformance: cpu - instr_test_v5 15-brk" { + _ = try helpers.runRom("instr_test-v5/rom_singles/15-brk.nes", 60); +} +test "conformance: cpu - instr_test_v5 16-special" { + _ = try helpers.runRom("instr_test-v5/rom_singles/16-special.nes", 60); +} +test "conformance: cpu - branch_timing 1.branch_basics" { + _ = try helpers.runRom("branch_timing_tests/1.branch_basics.nes", 60); +} +test "conformance: cpu - branch_timing 2.backward_branch" { + _ = try helpers.runRom("branch_timing_tests/2.backward_branch.nes", 60); +} +test "conformance: cpu - branch_timing 3.forward_branch" { + _ = try helpers.runRom("branch_timing_tests/3.forward_branch.nes", 60); +} +test "conformance: cpu - cpu_dummy_reads" { + _ = try helpers.runRom("cpu_dummy_reads/cpu_dummy_reads.nes", 60); +} +test "conformance: cpu - cpu_dummy_writes oam" { + _ = try helpers.runRom("cpu_dummy_writes/cpu_dummy_writes_oam.nes", 60); +} +test "conformance: cpu - cpu_dummy_writes ppumem" { + _ = try helpers.runRom("cpu_dummy_writes/cpu_dummy_writes_ppumem.nes", 60); +} +test "conformance: cpu - cpu_timing_test6" { + _ = try helpers.runRom("cpu_timing_test6/cpu_timing_test.nes", 60); +} +test "conformance: cpu - cpu_reset ram_after_reset" { + _ = try helpers.runRom("cpu_reset/ram_after_reset.nes", 60); +} +test "conformance: cpu - cpu_reset registers" { + _ = try helpers.runRom("cpu_reset/registers.nes", 60); +} +test "conformance: cpu - cpu_interrupts_v2 main" { + _ = try helpers.runRom("cpu_interrupts_v2/cpu_interrupts.nes", 60); +} +test "conformance: cpu - cpu_interrupts_v2 cli_latency" { + _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/1-cli_latency.nes", 60); +} +test "conformance: cpu - cpu_interrupts_v2 nmi_and_brk" { + _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/2-nmi_and_brk.nes", 60); +} +test "conformance: cpu - cpu_interrupts_v2 nmi_and_irq" { + _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/3-nmi_and_irq.nes", 60); +} +test "conformance: cpu - cpu_interrupts_v2 irq_and_dma" { + _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/4-irq_and_dma.nes", 60); +} +test "conformance: cpu - cpu_interrupts_v2 branch_delays_irq" { + _ = try helpers.runRom("cpu_interrupts_v2/rom_singles/5-branch_delays_irq.nes", 60); +} +test "conformance: cpu - cpu_test5 official" { + _ = try helpers.runRom("blargg_nes_cpu_test5/official.nes", 60); +} +test "conformance: cpu - cpu_test5 full" { + _ = try helpers.runRom("blargg_nes_cpu_test5/cpu.nes", 60); +} +test "conformance: cpu - instr_timing" { + _ = try helpers.runRom("instr_timing/instr_timing.nes", 60); +} +test "conformance: cpu - instr_timing 1-instr_timing" { + _ = try helpers.runRom("instr_timing/rom_singles/1-instr_timing.nes", 60); +} +test "conformance: cpu - instr_timing 2-branch_timing" { + _ = try helpers.runRom("instr_timing/rom_singles/2-branch_timing.nes", 60); +} +test "conformance: cpu - exec_space apu" { + _ = try helpers.runRom("cpu_exec_space/test_cpu_exec_space_apu.nes", 60); +} +test "conformance: cpu - exec_space ppuio" { + _ = try helpers.runRom("cpu_exec_space/test_cpu_exec_space_ppuio.nes", 60); +} diff --git a/src/system/nes/conformance/helpers.zig b/src/system/nes/conformance/helpers.zig index daecfd1..c982557 100644 --- a/src/system/nes/conformance/helpers.zig +++ b/src/system/nes/conformance/helpers.zig @@ -1,4 +1,4 @@ -// ponytail: simple stateless harness helpers without custom runner frameworks +// simple stateless harness helpers without custom runner frameworks const std = @import("std"); const testing = std.testing; const build_options = @import("build_options"); @@ -12,7 +12,7 @@ pub fn loadRomAlloc(allocator: std.mem.Allocator, relative_path: []const u8) ![] return try dir.readFileAlloc(testing.io, relative_path, allocator, @enumFromInt(10 * 1024 * 1024)); } -// ponytail: runRom asserts progress so test blocks can be concise 1-liners +// runRom asserts progress so test blocks can be concise 1-liners pub fn runRom(relative_path: []const u8, frames: usize) !Nes { if (build_options.nes_test_roms_dir == null) return error.SkipZigTest; const rom_data = try loadRomAlloc(testing.allocator, relative_path); diff --git a/src/system/nes/conformance/input.zig b/src/system/nes/conformance/input.zig index 9dafe81..e298afb 100644 --- a/src/system/nes/conformance/input.zig +++ b/src/system/nes/conformance/input.zig @@ -1,4 +1,4 @@ -// ponytail: modular Input conformance test suite +// modular Input conformance test suite const std = @import("std"); const testing = std.testing; const helpers = @import("helpers.zig"); diff --git a/src/system/nes/conformance/mapper.zig b/src/system/nes/conformance/mapper.zig index 7ab84e6..1f02c16 100644 --- a/src/system/nes/conformance/mapper.zig +++ b/src/system/nes/conformance/mapper.zig @@ -1,27 +1,73 @@ -// ponytail: 1-line Mapper conformance test suite +// 1-line Mapper conformance test suite const testing = @import("std").testing; const helpers = @import("helpers.zig"); -test "conformance: mapper - mmc1_a12" { _ = try helpers.runRom("MMC1_A12/mmc1_a12.nes", 60); } -test "conformance: mapper - mmc3_test_1 1-clocking" { _ = try helpers.runRom("mmc3_test/1-clocking.nes", 60); } -test "conformance: mapper - mmc3_test_1 2-details" { _ = try helpers.runRom("mmc3_test/2-details.nes", 60); } -test "conformance: mapper - mmc3_test_1 3-A12_clocking" { _ = try helpers.runRom("mmc3_test/3-A12_clocking.nes", 60); } -test "conformance: mapper - mmc3_test_1 4-scanline_timing" { _ = try helpers.runRom("mmc3_test/4-scanline_timing.nes", 60); } -test "conformance: mapper - mmc3_test_1 5-MMC3" { _ = try helpers.runRom("mmc3_test/5-MMC3.nes", 60); } -test "conformance: mapper - mmc3_test_1 6-MMC6" { _ = try helpers.runRom("mmc3_test/6-MMC6.nes", 60); } -test "conformance: mapper - mmc3_test_2 1-clocking" { _ = try helpers.runRom("mmc3_test_2/rom_singles/1-clocking.nes", 60); } -test "conformance: mapper - mmc3_test_2 2-details" { _ = try helpers.runRom("mmc3_test_2/rom_singles/2-details.nes", 60); } -test "conformance: mapper - mmc3_test_2 3-A12_clocking" { _ = try helpers.runRom("mmc3_test_2/rom_singles/3-A12_clocking.nes", 60); } -test "conformance: mapper - mmc3_test_2 4-scanline_timing" { _ = try helpers.runRom("mmc3_test_2/rom_singles/4-scanline_timing.nes", 60); } -test "conformance: mapper - mmc3_test_2 5-MMC3" { _ = try helpers.runRom("mmc3_test_2/rom_singles/5-MMC3.nes", 60); } -test "conformance: mapper - mmc3_test_2 6-MMC3_alt" { _ = try helpers.runRom("mmc3_test_2/rom_singles/6-MMC3_alt.nes", 60); } -test "conformance: mapper - mmc3_irq 1.Clocking" { _ = try helpers.runRom("mmc3_irq_tests/1.Clocking.nes", 60); } -test "conformance: mapper - mmc3_irq 2.Details" { _ = try helpers.runRom("mmc3_irq_tests/2.Details.nes", 60); } -test "conformance: mapper - mmc3_irq 3.A12_clocking" { _ = try helpers.runRom("mmc3_irq_tests/3.A12_clocking.nes", 60); } -test "conformance: mapper - mmc3_irq 4.Scanline_timing" { _ = try helpers.runRom("mmc3_irq_tests/4.Scanline_timing.nes", 60); } -test "conformance: mapper - mmc3_irq 5.MMC3_rev_A" { _ = try helpers.runRom("mmc3_irq_tests/5.MMC3_rev_A.nes", 60); } -test "conformance: mapper - mmc3_irq 6.MMC3_rev_B" { _ = try helpers.runRom("mmc3_irq_tests/6.MMC3_rev_B.nes", 60); } -test "conformance: mapper - 240pee bnrom" { _ = try helpers.runRom("240pee/240pee-bnrom.nes", 60); } -test "conformance: mapper - blade_buster" { _ = try helpers.runRom("other/BladeBuster.nes", 60); } -test "conformance: mapper - oam3" { _ = try helpers.runRom("other/oam3.nes", 60); } -test "conformance: mapper - nestopia" { _ = try helpers.runRom("other/nestopia.nes", 60); } +test "conformance: mapper - mmc1_a12" { + _ = try helpers.runRom("MMC1_A12/mmc1_a12.nes", 60); +} +test "conformance: mapper - mmc3_test_1 1-clocking" { + _ = try helpers.runRom("mmc3_test/1-clocking.nes", 60); +} +test "conformance: mapper - mmc3_test_1 2-details" { + _ = try helpers.runRom("mmc3_test/2-details.nes", 60); +} +test "conformance: mapper - mmc3_test_1 3-A12_clocking" { + _ = try helpers.runRom("mmc3_test/3-A12_clocking.nes", 60); +} +test "conformance: mapper - mmc3_test_1 4-scanline_timing" { + _ = try helpers.runRom("mmc3_test/4-scanline_timing.nes", 60); +} +test "conformance: mapper - mmc3_test_1 5-MMC3" { + _ = try helpers.runRom("mmc3_test/5-MMC3.nes", 60); +} +test "conformance: mapper - mmc3_test_1 6-MMC6" { + _ = try helpers.runRom("mmc3_test/6-MMC6.nes", 60); +} +test "conformance: mapper - mmc3_test_2 1-clocking" { + _ = try helpers.runRom("mmc3_test_2/rom_singles/1-clocking.nes", 60); +} +test "conformance: mapper - mmc3_test_2 2-details" { + _ = try helpers.runRom("mmc3_test_2/rom_singles/2-details.nes", 60); +} +test "conformance: mapper - mmc3_test_2 3-A12_clocking" { + _ = try helpers.runRom("mmc3_test_2/rom_singles/3-A12_clocking.nes", 60); +} +test "conformance: mapper - mmc3_test_2 4-scanline_timing" { + _ = try helpers.runRom("mmc3_test_2/rom_singles/4-scanline_timing.nes", 60); +} +test "conformance: mapper - mmc3_test_2 5-MMC3" { + _ = try helpers.runRom("mmc3_test_2/rom_singles/5-MMC3.nes", 60); +} +test "conformance: mapper - mmc3_test_2 6-MMC3_alt" { + _ = try helpers.runRom("mmc3_test_2/rom_singles/6-MMC3_alt.nes", 60); +} +test "conformance: mapper - mmc3_irq 1.Clocking" { + _ = try helpers.runRom("mmc3_irq_tests/1.Clocking.nes", 60); +} +test "conformance: mapper - mmc3_irq 2.Details" { + _ = try helpers.runRom("mmc3_irq_tests/2.Details.nes", 60); +} +test "conformance: mapper - mmc3_irq 3.A12_clocking" { + _ = try helpers.runRom("mmc3_irq_tests/3.A12_clocking.nes", 60); +} +test "conformance: mapper - mmc3_irq 4.Scanline_timing" { + _ = try helpers.runRom("mmc3_irq_tests/4.Scanline_timing.nes", 60); +} +test "conformance: mapper - mmc3_irq 5.MMC3_rev_A" { + _ = try helpers.runRom("mmc3_irq_tests/5.MMC3_rev_A.nes", 60); +} +test "conformance: mapper - mmc3_irq 6.MMC3_rev_B" { + _ = try helpers.runRom("mmc3_irq_tests/6.MMC3_rev_B.nes", 60); +} +test "conformance: mapper - 240pee bnrom" { + _ = try helpers.runRom("240pee/240pee-bnrom.nes", 60); +} +test "conformance: mapper - blade_buster" { + _ = try helpers.runRom("other/BladeBuster.nes", 60); +} +test "conformance: mapper - oam3" { + _ = try helpers.runRom("other/oam3.nes", 60); +} +test "conformance: mapper - nestopia" { + _ = try helpers.runRom("other/nestopia.nes", 60); +} diff --git a/src/system/nes/conformance/misc.zig b/src/system/nes/conformance/misc.zig index 6a9e658..1f75feb 100644 --- a/src/system/nes/conformance/misc.zig +++ b/src/system/nes/conformance/misc.zig @@ -1,19 +1,49 @@ -// ponytail: 1-line Misc conformance test suite +// 1-line Misc conformance test suite const testing = @import("std").testing; const helpers = @import("helpers.zig"); -test "conformance: misc - 240p test suite" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("240pee/240pee.nes", 60)).bus.ppu.framebuffer) > 1000); } -test "conformance: misc - scanline" { _ = try helpers.runRom("scanline/scanline.nes", 60); } -test "conformance: misc - instr_misc" { _ = try helpers.runRom("instr_misc/instr_misc.nes", 60); } -test "conformance: misc - abs_x_wrap" { _ = try helpers.runRom("instr_misc/rom_singles/01-abs_x_wrap.nes", 60); } -test "conformance: misc - branch_wrap" { _ = try helpers.runRom("instr_misc/rom_singles/02-branch_wrap.nes", 60); } -test "conformance: misc - dummy_reads" { _ = try helpers.runRom("instr_misc/rom_singles/03-dummy_reads.nes", 60); } -test "conformance: misc - dummy_reads_apu" { _ = try helpers.runRom("instr_misc/rom_singles/04-dummy_reads_apu.nes", 60); } -test "conformance: misc - nintendulator" { _ = try helpers.runRom("other/nintendulator.nes", 60); } -test "conformance: misc - fceuxd" { _ = try helpers.runRom("other/fceuxd.nes", 60); } -test "conformance: misc - read2004" { _ = try helpers.runRom("other/read2004.nes", 60); } -test "conformance: misc - blargg_litewall-9" { _ = try helpers.runRom("other/blargg_litewall-9.nes", 60); } -test "conformance: misc - blargg_litewall-2" { _ = try helpers.runRom("other/blargg_litewall-2.nes", 60); } -test "conformance: misc - high-hopes" { _ = try helpers.runRom("other/high-hopes.nes", 60); } -test "conformance: misc - snow" { _ = try helpers.runRom("other/snow.nes", 60); } -test "conformance: misc - SimpleParallaxDemo" { _ = try helpers.runRom("other/SimpleParallaxDemo.nes", 60); } +test "conformance: misc - 240p test suite" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("240pee/240pee.nes", 60)).bus.ppu.framebuffer) > 1000); +} +test "conformance: misc - scanline" { + _ = try helpers.runRom("scanline/scanline.nes", 60); +} +test "conformance: misc - instr_misc" { + _ = try helpers.runRom("instr_misc/instr_misc.nes", 60); +} +test "conformance: misc - abs_x_wrap" { + _ = try helpers.runRom("instr_misc/rom_singles/01-abs_x_wrap.nes", 60); +} +test "conformance: misc - branch_wrap" { + _ = try helpers.runRom("instr_misc/rom_singles/02-branch_wrap.nes", 60); +} +test "conformance: misc - dummy_reads" { + _ = try helpers.runRom("instr_misc/rom_singles/03-dummy_reads.nes", 60); +} +test "conformance: misc - dummy_reads_apu" { + _ = try helpers.runRom("instr_misc/rom_singles/04-dummy_reads_apu.nes", 60); +} +test "conformance: misc - nintendulator" { + _ = try helpers.runRom("other/nintendulator.nes", 60); +} +test "conformance: misc - fceuxd" { + _ = try helpers.runRom("other/fceuxd.nes", 60); +} +test "conformance: misc - read2004" { + _ = try helpers.runRom("other/read2004.nes", 60); +} +test "conformance: misc - blargg_litewall-9" { + _ = try helpers.runRom("other/blargg_litewall-9.nes", 60); +} +test "conformance: misc - blargg_litewall-2" { + _ = try helpers.runRom("other/blargg_litewall-2.nes", 60); +} +test "conformance: misc - high-hopes" { + _ = try helpers.runRom("other/high-hopes.nes", 60); +} +test "conformance: misc - snow" { + _ = try helpers.runRom("other/snow.nes", 60); +} +test "conformance: misc - SimpleParallaxDemo" { + _ = try helpers.runRom("other/SimpleParallaxDemo.nes", 60); +} diff --git a/src/system/nes/conformance/ppu.zig b/src/system/nes/conformance/ppu.zig index c44c648..7fb74b7 100644 --- a/src/system/nes/conformance/ppu.zig +++ b/src/system/nes/conformance/ppu.zig @@ -1,53 +1,151 @@ -// ponytail: 1-line PPU conformance test suite +// 1-line PPU conformance test suite const testing = @import("std").testing; const helpers = @import("helpers.zig"); -test "conformance: ppu - vram_access" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_ppu_tests_2005.09.15b/vram_access.nes", 60)).bus.ppu.framebuffer) > 50); } -test "conformance: ppu - palette_ram" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_ppu_tests_2005.09.15b/palette_ram.nes", 60)).bus.ppu.framebuffer) > 50); } -test "conformance: ppu - sprite_ram" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_ppu_tests_2005.09.15b/sprite_ram.nes", 60)).bus.ppu.framebuffer) > 50); } -test "conformance: ppu - oam_read" { try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("oam_read/oam_read.nes", 60)).bus.ppu.framebuffer) > 500); } -test "conformance: ppu - oam_stress" { _ = try helpers.runRom("oam_stress/oam_stress.nes", 60); } -test "conformance: ppu - ppu_open_bus" { _ = try helpers.runRom("ppu_open_bus/ppu_open_bus.nes", 60); } -test "conformance: ppu - vbl_clear_time" { _ = try helpers.runRom("blargg_ppu_tests_2005.09.15b/vbl_clear_time.nes", 60); } -test "conformance: ppu - power_up_palette" { _ = try helpers.runRom("blargg_ppu_tests_2005.09.15b/power_up_palette.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi main" { _ = try helpers.runRom("ppu_vbl_nmi/ppu_vbl_nmi.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi basics" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/01-vbl_basics.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi vbl_set_time" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/02-vbl_set_time.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi vbl_clear_time" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/03-vbl_clear_time.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi nmi_control" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/04-nmi_control.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi nmi_timing" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/05-nmi_timing.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi suppression" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/06-suppression.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi nmi_on_timing" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/07-nmi_on_timing.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi nmi_off_timing" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/08-nmi_off_timing.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi even_odd_frames" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/09-even_odd_frames.nes", 60); } -test "conformance: ppu - ppu_vbl_nmi even_odd_timing" { _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/10-even_odd_timing.nes", 60); } -test "conformance: ppu - sprite_hit basics" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/01.basics.nes", 60); } -test "conformance: ppu - sprite_hit alignment" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/02.alignment.nes", 60); } -test "conformance: ppu - sprite_hit corners" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/03.corners.nes", 60); } -test "conformance: ppu - sprite_hit flip" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/04.flip.nes", 60); } -test "conformance: ppu - sprite_hit left_clip" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/05.left_clip.nes", 60); } -test "conformance: ppu - sprite_hit right_edge" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/06.right_edge.nes", 60); } -test "conformance: ppu - sprite_hit screen_bottom" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/07.screen_bottom.nes", 60); } -test "conformance: ppu - sprite_hit double_height" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/08.double_height.nes", 60); } -test "conformance: ppu - sprite_hit timing_basics" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/09.timing_basics.nes", 60); } -test "conformance: ppu - sprite_hit timing_order" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/10.timing_order.nes", 60); } -test "conformance: ppu - sprite_hit edge_timing" { _ = try helpers.runRom("sprite_hit_tests_2005.10.05/11.edge_timing.nes", 60); } -test "conformance: ppu - sprite_overflow 1.basics" { _ = try helpers.runRom("sprite_overflow_tests/1.basics.nes", 60); } -test "conformance: ppu - sprite_overflow 1.Basics" { _ = try helpers.runRom("sprite_overflow_tests/1.Basics.nes", 60); } -test "conformance: ppu - sprite_overflow 2.Details" { _ = try helpers.runRom("sprite_overflow_tests/2.Details.nes", 60); } -test "conformance: ppu - sprite_overflow 3.Timing" { _ = try helpers.runRom("sprite_overflow_tests/3.Timing.nes", 60); } -test "conformance: ppu - sprite_overflow 4.Obscure" { _ = try helpers.runRom("sprite_overflow_tests/4.Obscure.nes", 60); } -test "conformance: ppu - sprite_overflow 5.Emulator" { _ = try helpers.runRom("sprite_overflow_tests/5.Emulator.nes", 60); } -test "conformance: ppu - vbl_nmi_timing frame_basics" { _ = try helpers.runRom("vbl_nmi_timing/1.frame_basics.nes", 60); } -test "conformance: ppu - vbl_nmi_timing vbl_timing" { _ = try helpers.runRom("vbl_nmi_timing/2.vbl_timing.nes", 60); } -test "conformance: ppu - vbl_nmi_timing even_odd_frames" { _ = try helpers.runRom("vbl_nmi_timing/3.even_odd_frames.nes", 60); } -test "conformance: ppu - vbl_nmi_timing vbl_clear_timing" { _ = try helpers.runRom("vbl_nmi_timing/4.vbl_clear_timing.nes", 60); } -test "conformance: ppu - vbl_nmi_timing nmi_suppression" { _ = try helpers.runRom("vbl_nmi_timing/5.nmi_suppression.nes", 60); } -test "conformance: ppu - vbl_nmi_timing nmi_disable" { _ = try helpers.runRom("vbl_nmi_timing/6.nmi_disable.nes", 60); } -test "conformance: ppu - vbl_nmi_timing nmi_timing" { _ = try helpers.runRom("vbl_nmi_timing/7.nmi_timing.nes", 60); } -test "conformance: ppu - ppu_read_buffer" { _ = try helpers.runRom("ppu_read_buffer/test_ppu_read_buffer.nes", 60); } -test "conformance: ppu - full_palette main" { _ = try helpers.runRom("full_palette/full_palette.nes", 60); } -test "conformance: ppu - full_palette smooth" { _ = try helpers.runRom("full_palette/full_palette_smooth.nes", 60); } -test "conformance: ppu - full_palette flowing" { _ = try helpers.runRom("full_palette/flowing_palette.nes", 60); } -test "conformance: ppu - scrolltest" { _ = try helpers.runRom("scrolltest/scroll.nes", 60); } -test "conformance: ppu - scanline_a1" { _ = try helpers.runRom("scanline-a1/scanline.nes", 60); } +test "conformance: ppu - vram_access" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_ppu_tests_2005.09.15b/vram_access.nes", 60)).bus.ppu.framebuffer) > 50); +} +test "conformance: ppu - palette_ram" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_ppu_tests_2005.09.15b/palette_ram.nes", 60)).bus.ppu.framebuffer) > 50); +} +test "conformance: ppu - sprite_ram" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("blargg_ppu_tests_2005.09.15b/sprite_ram.nes", 60)).bus.ppu.framebuffer) > 50); +} +test "conformance: ppu - oam_read" { + try testing.expect(helpers.countNonBlackPixels(&(try helpers.runRom("oam_read/oam_read.nes", 60)).bus.ppu.framebuffer) > 500); +} +test "conformance: ppu - oam_stress" { + _ = try helpers.runRom("oam_stress/oam_stress.nes", 60); +} +test "conformance: ppu - ppu_open_bus" { + _ = try helpers.runRom("ppu_open_bus/ppu_open_bus.nes", 60); +} +test "conformance: ppu - vbl_clear_time" { + _ = try helpers.runRom("blargg_ppu_tests_2005.09.15b/vbl_clear_time.nes", 60); +} +test "conformance: ppu - power_up_palette" { + _ = try helpers.runRom("blargg_ppu_tests_2005.09.15b/power_up_palette.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi main" { + _ = try helpers.runRom("ppu_vbl_nmi/ppu_vbl_nmi.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi basics" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/01-vbl_basics.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi vbl_set_time" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/02-vbl_set_time.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi vbl_clear_time" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/03-vbl_clear_time.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi nmi_control" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/04-nmi_control.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi nmi_timing" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/05-nmi_timing.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi suppression" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/06-suppression.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi nmi_on_timing" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/07-nmi_on_timing.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi nmi_off_timing" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/08-nmi_off_timing.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi even_odd_frames" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/09-even_odd_frames.nes", 60); +} +test "conformance: ppu - ppu_vbl_nmi even_odd_timing" { + _ = try helpers.runRom("ppu_vbl_nmi/rom_singles/10-even_odd_timing.nes", 60); +} +test "conformance: ppu - sprite_hit basics" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/01.basics.nes", 60); +} +test "conformance: ppu - sprite_hit alignment" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/02.alignment.nes", 60); +} +test "conformance: ppu - sprite_hit corners" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/03.corners.nes", 60); +} +test "conformance: ppu - sprite_hit flip" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/04.flip.nes", 60); +} +test "conformance: ppu - sprite_hit left_clip" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/05.left_clip.nes", 60); +} +test "conformance: ppu - sprite_hit right_edge" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/06.right_edge.nes", 60); +} +test "conformance: ppu - sprite_hit screen_bottom" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/07.screen_bottom.nes", 60); +} +test "conformance: ppu - sprite_hit double_height" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/08.double_height.nes", 60); +} +test "conformance: ppu - sprite_hit timing_basics" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/09.timing_basics.nes", 60); +} +test "conformance: ppu - sprite_hit timing_order" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/10.timing_order.nes", 60); +} +test "conformance: ppu - sprite_hit edge_timing" { + _ = try helpers.runRom("sprite_hit_tests_2005.10.05/11.edge_timing.nes", 60); +} +test "conformance: ppu - sprite_overflow 1.basics" { + _ = try helpers.runRom("sprite_overflow_tests/1.basics.nes", 60); +} +test "conformance: ppu - sprite_overflow 1.Basics" { + _ = try helpers.runRom("sprite_overflow_tests/1.Basics.nes", 60); +} +test "conformance: ppu - sprite_overflow 2.Details" { + _ = try helpers.runRom("sprite_overflow_tests/2.Details.nes", 60); +} +test "conformance: ppu - sprite_overflow 3.Timing" { + _ = try helpers.runRom("sprite_overflow_tests/3.Timing.nes", 60); +} +test "conformance: ppu - sprite_overflow 4.Obscure" { + _ = try helpers.runRom("sprite_overflow_tests/4.Obscure.nes", 60); +} +test "conformance: ppu - sprite_overflow 5.Emulator" { + _ = try helpers.runRom("sprite_overflow_tests/5.Emulator.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing frame_basics" { + _ = try helpers.runRom("vbl_nmi_timing/1.frame_basics.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing vbl_timing" { + _ = try helpers.runRom("vbl_nmi_timing/2.vbl_timing.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing even_odd_frames" { + _ = try helpers.runRom("vbl_nmi_timing/3.even_odd_frames.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing vbl_clear_timing" { + _ = try helpers.runRom("vbl_nmi_timing/4.vbl_clear_timing.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing nmi_suppression" { + _ = try helpers.runRom("vbl_nmi_timing/5.nmi_suppression.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing nmi_disable" { + _ = try helpers.runRom("vbl_nmi_timing/6.nmi_disable.nes", 60); +} +test "conformance: ppu - vbl_nmi_timing nmi_timing" { + _ = try helpers.runRom("vbl_nmi_timing/7.nmi_timing.nes", 60); +} +test "conformance: ppu - ppu_read_buffer" { + _ = try helpers.runRom("ppu_read_buffer/test_ppu_read_buffer.nes", 60); +} +test "conformance: ppu - full_palette main" { + _ = try helpers.runRom("full_palette/full_palette.nes", 60); +} +test "conformance: ppu - full_palette smooth" { + _ = try helpers.runRom("full_palette/full_palette_smooth.nes", 60); +} +test "conformance: ppu - full_palette flowing" { + _ = try helpers.runRom("full_palette/flowing_palette.nes", 60); +} +test "conformance: ppu - scrolltest" { + _ = try helpers.runRom("scrolltest/scroll.nes", 60); +} +test "conformance: ppu - scanline_a1" { + _ = try helpers.runRom("scanline-a1/scanline.nes", 60); +} diff --git a/src/system/nes/conformance/root.zig b/src/system/nes/conformance/root.zig index 6b7a719..e963e47 100644 --- a/src/system/nes/conformance/root.zig +++ b/src/system/nes/conformance/root.zig @@ -1,4 +1,4 @@ -// ponytail: root module aggregating all subsystem conformance test modules +// root module aggregating all subsystem conformance test modules const std = @import("std"); pub const helpers = @import("helpers.zig");