Add unit tests for writing order, bus values, bank, initial_clear and OPL mode; fix OPL register address

This commit is contained in:
Gustavo Henrique Santos Souza de Miranda 2026-06-05 03:14:05 -03:00
parent 997fd7fb6e
commit 86e13c1c32
1 changed files with 66 additions and 9 deletions

View File

@ -1,23 +1,80 @@
#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "YMF262-HAL.hpp"
#include "FakeGPIO.hpp"
class YMF262_HALWriteTest : public ::testing::Test {
class YMF262_HALTest : public ::testing::Test {
protected:
FakeGpio fake;
YMF262_HAL<FakeGpio> 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");
}
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));
}