From 86e13c1c322ae052eedb76c1e4244b2bafdca5fd Mon Sep 17 00:00:00 2001 From: Gustavo Henrique Santos Souza de Miranda Date: Fri, 5 Jun 2026 03:14:05 -0300 Subject: [PATCH] Add unit tests for writing order, bus values, bank, initial_clear and OPL mode; fix OPL register address --- Tests/test_write.cpp | 75 ++++++++++++++++++++++++++++++++++++++------ 1 file changed, 66 insertions(+), 9 deletions(-) diff --git a/Tests/test_write.cpp b/Tests/test_write.cpp index f706a54..f987c40 100644 --- a/Tests/test_write.cpp +++ b/Tests/test_write.cpp @@ -1,23 +1,80 @@ #include +#include #include "YMF262-HAL.hpp" #include "FakeGPIO.hpp" -class YMF262_HALWriteTest : public ::testing::Test { +class YMF262_HALTest : public ::testing::Test { protected: FakeGpio fake; YMF262_HAL hal{fake, 14318000, 216000000}; // ^ fake e hal criados ANTES de cada teste, prontos pra usar }; -TEST_F(YMF262_HALWriteTest,TestForEmptyRun) { + +TEST_F(YMF262_HALTest, TestWriteRun) { hal.write(Bank::BANK_0, 0x40, 0x20); - EXPECT_NE(fake.operations.size(),0); - EXPECT_NE(fake.bus_values.size(), 0); - EXPECT_NE(fake.delays.size(), 0); + + EXPECT_THAT(fake.operations, testing::ElementsAre( + "a0 ADDRESS", + "a1 BANK_0", + "delay_ticks", + "cs ACTIVE", + "wr ACTIVE", + "delay_ticks", + "data_bus", + "delay_ticks", + "wr INACTIVE", + "cs INACTIVE", + "delay_ticks", + "delay_ticks", + "delay_ticks", + "a0 DATA", + "a1 BANK_0", + "delay_ticks", + "cs ACTIVE", + "wr ACTIVE", + "delay_ticks", + "data_bus", + "delay_ticks", + "wr INACTIVE", + "cs INACTIVE", + "delay_ticks", + "delay_ticks", + "delay_ticks" + )); +} + +TEST_F(YMF262_HALTest, TestWriteDataBusValues) { + hal.write(Bank::BANK_0, 0x40, 0x20); + EXPECT_THAT(fake.bus_values, testing::ElementsAre(0x40, 0x20)); } -TEST_F(YMF262_HALWriteTest, A0MudaEntreCiclos) { - hal.write(Bank::BANK_0, 0x40, 0x20); - EXPECT_EQ(fake.operations.front(), "a0 ADDRESS"); -} \ No newline at end of file +TEST_F(YMF262_HALTest, TestWriteBankValue) { + hal.write(Bank::BANK_1, 0x40, 0x20); + // verifica que aparece "a1 BANK_1" nas operações, não "a1 BANK_0" + EXPECT_THAT(fake.operations, testing::Contains("a1 BANK_1")); + EXPECT_THAT(fake.operations, testing::Not(testing::Contains("a1 BANK_0"))); +} + +TEST_F(YMF262_HALTest,TestWriteSetInitialClear) { + + hal.initial_clear(); + EXPECT_THAT(fake.operations, testing::ElementsAre( + "ic ACTIVE", + "delay_ticks", + "ic INACTIVE", + "delay_ticks" + )); +} + +TEST_F(YMF262_HALTest, TestSetOPLModeToOPL3) { + hal.set_OPL_Mode(OPLMode::OPL3); + EXPECT_THAT(fake.bus_values, testing::ElementsAre(0x05, 0x01)); + EXPECT_THAT(fake.operations, testing::Contains("a1 BANK_1")); +} + +TEST_F(YMF262_HALTest, TestSetOPLModeToOPL2) { + hal.set_OPL_Mode(OPLMode::OPL2); + EXPECT_THAT(fake.bus_values, testing::ElementsAre(0x05, 0x00)); +}