Add buffering test to spot errors
This commit is contained in:
parent
22f58fdbf5
commit
d9ab6720d8
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue