2 Commits

Author SHA1 Message Date
ed01ed80cd tests: add tests for memory
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
2023-09-24 18:04:28 +05:30
8e26cadc9a chore: revert util/crypto
Signed-off-by: Amneesh Singh <natto@weirdnatto.in>
2023-09-24 17:45:19 +05:30
4 changed files with 131 additions and 9 deletions

View File

@@ -4,7 +4,8 @@ project('matar', 'cpp',
default_options : ['warning_level=3', default_options : ['warning_level=3',
'werror=true', 'werror=true',
'optimization=3', 'optimization=3',
'cpp_std=c++20']) 'cpp_std=c++20',
'default_library=static'])
compiler = meson.get_compiler('cpp') compiler = meson.get_compiler('cpp')

View File

@@ -2,8 +2,7 @@
#include <array> #include <array>
#include <bit> #include <bit>
#include <iomanip> #include <fmt/core.h>
#include <sstream>
#include <string> #include <string>
// Why I wrote this myself? I do not know // Why I wrote this myself? I do not know
@@ -15,8 +14,8 @@ using std::rotr;
template<typename std::size_t N> template<typename std::size_t N>
std::string std::string
sha256(std::array<uint8_t, N>& data) { sha256(std::array<uint8_t, N>& data) {
std::stringstream ss;
// Assuming 1 byte = 8 bits // Assuming 1 byte = 8 bits
std::string string;
size_t k = 512 - (N * 8 + 65) % 512; size_t k = 512 - (N * 8 + 65) % 512;
size_t L = N + (65 + k) / 8; size_t L = N + (65 + k) / 8;
size_t i = 0, j = 0; size_t i = 0, j = 0;
@@ -109,12 +108,12 @@ sha256(std::array<uint8_t, N>& data) {
h[j] += h0[j]; h[j] += h0[j];
} }
ss << std::hex << std::setfill('0');
for (j = 0; j < 8; j++) for (j = 0; j < 8; j++)
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
ss << std::setw(2) << ((h[j] >> (24 - i * 8)) & 0xFF); fmt::format_to(std::back_inserter(string),
"{:02x}",
((h[j] >> (24 - i * 8)) & 0xFF));
return ss.str(); return string;
} }
} }

121
tests/memory.cc Normal file
View File

@@ -0,0 +1,121 @@
#include "memory.hh"
#include <catch2/catch_test_macros.hpp>
static constexpr auto TAG = "[memory]";
using namespace matar;
class MemFixture {
public:
MemFixture()
: memory(std::array<uint8_t, Memory::BIOS_SIZE>(),
std::vector<uint8_t>(Header::HEADER_SIZE)) {}
protected:
Memory memory;
};
TEST_CASE_METHOD(MemFixture, "bios", TAG) {
memory.write(0, 0xAC);
CHECK(memory.read(0) == 0xAC);
memory.write(0x3FFF, 0x48);
CHECK(memory.read(0x3FFF) == 0x48);
memory.write(0x2A56, 0x10);
CHECK(memory.read(0x2A56) == 0x10);
}
TEST_CASE_METHOD(MemFixture, "board wram", TAG) {
memory.write(0x2000000, 0xAC);
CHECK(memory.read(0x2000000) == 0xAC);
memory.write(0x203FFFF, 0x48);
CHECK(memory.read(0x203FFFF) == 0x48);
memory.write(0x2022A56, 0x10);
CHECK(memory.read(0x2022A56) == 0x10);
}
TEST_CASE_METHOD(MemFixture, "chip wram", TAG) {
memory.write(0x3000000, 0xAC);
CHECK(memory.read(0x3000000) == 0xAC);
memory.write(0x3007FFF, 0x48);
CHECK(memory.read(0x3007FFF) == 0x48);
memory.write(0x3002A56, 0x10);
CHECK(memory.read(0x3002A56) == 0x10);
}
TEST_CASE_METHOD(MemFixture, "palette ram", TAG) {
memory.write(0x5000000, 0xAC);
CHECK(memory.read(0x5000000) == 0xAC);
memory.write(0x50003FF, 0x48);
CHECK(memory.read(0x50003FF) == 0x48);
memory.write(0x5000156, 0x10);
CHECK(memory.read(0x5000156) == 0x10);
}
TEST_CASE_METHOD(MemFixture, "video ram", TAG) {
memory.write(0x6000000, 0xAC);
CHECK(memory.read(0x6000000) == 0xAC);
memory.write(0x6017FFF, 0x48);
CHECK(memory.read(0x6017FFF) == 0x48);
memory.write(0x6012A56, 0x10);
CHECK(memory.read(0x6012A56) == 0x10);
}
TEST_CASE_METHOD(MemFixture, "oam obj ram", TAG) {
memory.write(0x7000000, 0xAC);
CHECK(memory.read(0x7000000) == 0xAC);
memory.write(0x70003FF, 0x48);
CHECK(memory.read(0x70003FF) == 0x48);
memory.write(0x7000156, 0x10);
CHECK(memory.read(0x7000156) == 0x10);
}
TEST_CASE("rom", TAG) {
// 32 megabyte ROM
Memory memory(std::array<uint8_t, Memory::BIOS_SIZE>(),
std::vector<uint8_t>(32 * 1024 * 1024));
SECTION("ROM1") {
memory.write(0x8000000, 0xAC);
CHECK(memory.read(0x8000000) == 0xAC);
memory.write(0x9FFFFFF, 0x48);
CHECK(memory.read(0x9FFFFFF) == 0x48);
memory.write(0x8ef0256, 0x10);
CHECK(memory.read(0x8ef0256) == 0x10);
}
SECTION("ROM2") {
memory.write(0xA000000, 0xAC);
CHECK(memory.read(0xA000000) == 0xAC);
memory.write(0xBFFFFFF, 0x48);
CHECK(memory.read(0xBFFFFFF) == 0x48);
memory.write(0xAEF0256, 0x10);
CHECK(memory.read(0xAEF0256) == 0x10);
}
SECTION("ROM3") {
memory.write(0xC000000, 0xAC);
CHECK(memory.read(0xC000000) == 0xAC);
memory.write(0xDFFFFFF, 0x48);
CHECK(memory.read(0xDFFFFFF) == 0x48);
memory.write(0xCEF0256, 0x10);
CHECK(memory.read(0xCEF0256) == 0x10);
}
}

View File

@@ -6,7 +6,8 @@ src = include_directories('../src')
tests_sources = files( tests_sources = files(
'main.cc', 'main.cc',
'bus.cc' 'bus.cc',
'memory.cc'
) )
subdir('cpu') subdir('cpu')