Add buffering test to spot errors

This commit is contained in:
Lynix 2022-04-18 23:14:48 +02:00
parent 22f58fdbf5
commit d9ab6720d8
1 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,81 @@
#include <Nazara/Core/MemoryView.hpp>
#include <catch2/catch.hpp>
SCENARIO("Buffering", "[CORE][BUFFERING]")
{
const char mem[] = "abcdefghijklmnopqrstuvwxyz";
for (std::size_t bufferSize : { 1, 2, 3, 4, 7, 0xFFFF })
{
Nz::MemoryView memView(mem, sizeof(mem));
memView.EnableBuffering(true, bufferSize);
WHEN("Using a buffer size of " + std::to_string(bufferSize))
{
CHECK(memView.GetCursorPos() == 0);
std::vector<char> readBuffer;
WHEN("Reading the full buffer")
{
readBuffer.resize(sizeof(mem));
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), mem, readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == sizeof(mem));
}
WHEN("Reading 2 bytes")
{
readBuffer.resize(2);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "ab", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 2);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "cd", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 4);
WHEN("Reading 4 bytes and reading")
{
readBuffer.resize(4);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "efgh", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 8);
AND_WHEN("Seeking at 10")
{
memView.SetCursorPos(10);
readBuffer.resize(2);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "kl", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 12);
}
AND_WHEN("Seeking at 6 and reading")
{
memView.SetCursorPos(6);
readBuffer.resize(2);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "ghij", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 8);
}
}
}
WHEN("Reading 6 then 2 bytes")
{
readBuffer.resize(6);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "abcdef", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 6);
readBuffer.resize(2);
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
CHECK(std::memcmp(readBuffer.data(), "gh", readBuffer.size()) == 0);
CHECK(memView.GetCursorPos() == 8);
}
}
}
}