From 7e2281a6402d7e47289c7984348654e30ac90ff2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Le=20Bihan?= Date: Sun, 11 Jul 2021 18:22:57 +0200 Subject: [PATCH] adding tests on getPixelReferenceFromTile tests --- tests/PPU/testTileRenderer.cpp | 136 +++++++++++++++++++++++++++------ 1 file changed, 113 insertions(+), 23 deletions(-) diff --git a/tests/PPU/testTileRenderer.cpp b/tests/PPU/testTileRenderer.cpp index 2392394..43c5e7b 100644 --- a/tests/PPU/testTileRenderer.cpp +++ b/tests/PPU/testTileRenderer.cpp @@ -11,6 +11,20 @@ #include "Ram/Ram.hpp" #include "PPU/Tile.hpp" +void fillRAMFromStrings(const std::vector &values, ComSquare::Ram::Ram &ram) +{ + uint8_t value; + int i = 0; + + for (auto row : values) { + while (!row.empty()) { + value = std::stoul(row.substr(0, 2), nullptr, 16); + row.erase(0, 2); + ram.write(i++, value); + } + } +} + TEST_CASE("read2BPPValue", "[PPU][TileRenderer]") { ComSquare::Ram::Ram vram(100, static_cast(0), "vramTest"); @@ -85,16 +99,7 @@ TEST_CASE("getPixelReferenceFromTileRow 4bpp", "[PPU][TileRenderer]") "1000540038000000" }; - uint8_t value; - int i = 0; - - for (auto row : vramValues) { - while (!row.empty()) { - value = std::stoul(row.substr(0, 2), nullptr, 16); - row.erase(0, 2); - vram.write(i++, value); - } - } + fillRAMFromStrings(vramValues, vram); char correctValues[8][8] = { {0, 7, 7, 7, 7, 7, 0, 0}, @@ -107,7 +112,7 @@ TEST_CASE("getPixelReferenceFromTileRow 4bpp", "[PPU][TileRenderer]") {0, 0, 3, 3, 3, 0, 0, 0} }; - i = 0; + int i = 0; int j = 0; for (const auto &row : correctValues) { for (const auto &refValue : row) { @@ -133,17 +138,7 @@ TEST_CASE("getPixelReferenceFromTileRow 8bpp", "[PPU][TileRenderer]") "00002800000000000000000000000000" }; - uint8_t value; - int i = 0; - - for (auto row : vramValues) { - while (!row.empty()) { - value = std::stoul(row.substr(0, 2), nullptr, 16); - row.erase(0, 2); - vram.write(i++, value); - } - } - + fillRAMFromStrings(vramValues, vram); uint8_t correctValues[8][8] = { {0x00, 0x22, 0x22, 0x22, 0x23, 0x23, 0x00, 0x00}, {0x22, 0x11, 0x42, 0x21, 0x41, 0x11, 0x24, 0x00}, @@ -156,7 +151,7 @@ TEST_CASE("getPixelReferenceFromTileRow 8bpp", "[PPU][TileRenderer]") }; - i = 0; + int i = 0; int j = 0; for (const auto &row : correctValues) { for (const auto &refValue : row) { @@ -166,3 +161,98 @@ TEST_CASE("getPixelReferenceFromTileRow 8bpp", "[PPU][TileRenderer]") i += 2; } } + +TEST_CASE("getPixelReferenceFromTile 2bpp", "[PPU][TileRenderer]") +{ + ComSquare::Ram::Ram vram(10, static_cast(0), "vramTest"); + ComSquare::Ram::Ram cgram(512, static_cast(0), "cgramTest"); + ComSquare::PPU::TileRenderer tileRenderer(vram, cgram); + + tileRenderer.setBpp(2); + + vram.write(2, 0xD6); + vram.write(3, 0x00); + + CHECK(tileRenderer.getPixelReferenceFromTile(2, 0) == 1); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 1) == 1); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 2) == 0); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 3) == 1); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 4) == 0); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 5) == 1); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 6) == 1); + CHECK(tileRenderer.getPixelReferenceFromTile(2, 7) == 0); +} + +TEST_CASE("getPixelReferenceFromTile 4bpp", "[PPU][TileRenderer]") +{ + ComSquare::Ram::Ram vram(40, static_cast(0), "vramTest"); + ComSquare::Ram::Ram cgram(512, static_cast(0), "cgramTest"); + ComSquare::PPU::TileRenderer tileRenderer(vram, cgram); + + tileRenderer.setBpp(4); + + std::vector vramValues { + "7C7C82EE82FE7C7C", + "0000D68254443838", + "7C00AA1082007C00", + "1000540038000000" + }; + + fillRAMFromStrings(vramValues, vram); + + char correctValues[8][8] = { + {0, 7, 7, 7, 7, 7, 0, 0}, + {7, 2, 6, 8, 6, 2, 7, 0}, + {7, 2, 2, 2, 2, 2, 7, 0}, + {0, 7, 7, 7, 7, 7, 0, 0}, + {0, 0, 0, 4, 0, 0, 0, 0}, + {3, 5, 0, 5, 0, 5, 3, 0}, + {0, 3, 4, 5, 4, 3, 0, 0}, + {0, 0, 3, 3, 3, 0, 0, 0} + }; + + int i = 0; + int j = 0; + for (const auto &row : correctValues) { + for (const auto &refValue : row) { + CHECK(tileRenderer.getPixelReferenceFromTile(i, j++) == refValue); + } + } +} + +TEST_CASE("getPixelReferenceFromTile 8bpp", "[PPU][TileRenderer]") +{ + ComSquare::Ram::Ram vram(100, static_cast(0), "vramTest"); + ComSquare::Ram::Ram cgram(512, static_cast(0), "cgramTest"); + ComSquare::PPU::TileRenderer tileRenderer(vram, cgram); + + tileRenderer.setBpp(8); + + std::vector vramValues { + "0C7C5CA0C0BC3C001010964038282018", + "0000020002007C000000820044003800", + "007C44927C82007C1010D6D67C7C3838", + "00002800000000000000000000000000" + }; + + fillRAMFromStrings(vramValues, vram); + uint8_t correctValues[8][8] = { + {0x00, 0x22, 0x22, 0x22, 0x23, 0x23, 0x00, 0x00}, + {0x22, 0x11, 0x42, 0x21, 0x41, 0x11, 0x24, 0x00}, + {0x23, 0x11, 0x12, 0x12, 0x12, 0x12, 0x24, 0x00}, + {0x00, 0x24, 0x25, 0x25, 0x25, 0x25, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00}, + {0x35, 0x32, 0x00, 0x31, 0x00, 0x31, 0x35, 0x00}, + {0x00, 0x34, 0x33, 0x31, 0x33, 0x34, 0x00, 0x00}, + {0x00, 0x00, 0x35, 0x36, 0x36, 0x00, 0x00, 0x00}, + }; + + + int i = 0; + int j = 0; + for (const auto &row : correctValues) { + for (const auto &refValue : row) { + CHECK(tileRenderer.getPixelReferenceFromTile(i, j++) == refValue); + } + } +}