#include #include #include "YMF262-HAL.hpp" #include "FakeGPIO.hpp" 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_HALTest, TestWriteRun) { hal.write(Bank::BANK_0, 0x40, 0x20); 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_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)); }