From 38756822825e20eca3b9e01b735946175223d692 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Sat, 7 Mar 2026 20:42:37 +0800 Subject: Refactor stream. --- test/base/io/AutoReadStreamTest.cpp | 32 ++++++++++++++++++++++++++++++ test/base/io/BufferStreamTest.cpp | 39 +++++++++++++++++++++++++++++++++++++ test/base/io/MemoryStreamTest.cpp | 30 ++++++++++++++++++++++++++++ 3 files changed, 101 insertions(+) create mode 100644 test/base/io/AutoReadStreamTest.cpp create mode 100644 test/base/io/BufferStreamTest.cpp create mode 100644 test/base/io/MemoryStreamTest.cpp (limited to 'test/base/io') diff --git a/test/base/io/AutoReadStreamTest.cpp b/test/base/io/AutoReadStreamTest.cpp new file mode 100644 index 00000000..e95b7c24 --- /dev/null +++ b/test/base/io/AutoReadStreamTest.cpp @@ -0,0 +1,32 @@ +#include "cru/base/io/AutoReadStream.h" +#include "cru/base/io/MemoryStream.h" + +#include + +#include +#include +#include + +TEST_CASE("AutoReadStream should work.", "[io][stream]") { + using namespace cru::io; + + const int size = 100; + std::vector buffer(size); + buffer[1] = std::byte(0xf0); + buffer[2] = std::byte(0x0f); + + MemoryStream underlying_stream(buffer.data(), buffer.size(), true); + AutoReadStream stream(&underlying_stream, true, false); + + REQUIRE(stream.CanRead()); + REQUIRE(!stream.CanWrite()); + + std::vector buffer2(size * 2); + + auto read = stream.Read(buffer2.data(), buffer2.size()); + auto read2 = stream.Read(buffer2.data(), size, 1); + + REQUIRE(read == size); + REQUIRE(std::ranges::equal(buffer, buffer2 | std::views::take(size))); + REQUIRE(read2 == Stream::kEOF); +} diff --git a/test/base/io/BufferStreamTest.cpp b/test/base/io/BufferStreamTest.cpp new file mode 100644 index 00000000..70780b48 --- /dev/null +++ b/test/base/io/BufferStreamTest.cpp @@ -0,0 +1,39 @@ +#include "cru/base/io/BufferStream.h" + +#include + +#include +#include +#include +#include + +TEST_CASE("BufferStream should work.", "[io][stream]") { + using namespace cru::io; + + const int size = 100; + std::vector buffer(size); + buffer[1] = std::byte(0xf0); + buffer[2] = std::byte(0x0f); + + BufferStream stream; + + std::vector buffer2(size * 2); + cru::Index read, read2; + + std::thread read_thread([&] { + read = stream.Read(buffer2.data(), buffer2.size()); + read2 = stream.Read(buffer2.data(), size, 1); + }); + + std::thread write_thread([&] { + stream.Write(buffer.data(), buffer.size()); + stream.WriteEof(); + }); + + read_thread.join(); + write_thread.join(); + + REQUIRE(read == size); + REQUIRE(std::ranges::equal(buffer, buffer2 | std::views::take(size))); + REQUIRE(read2 == Stream::kEOF); +} diff --git a/test/base/io/MemoryStreamTest.cpp b/test/base/io/MemoryStreamTest.cpp new file mode 100644 index 00000000..684971b1 --- /dev/null +++ b/test/base/io/MemoryStreamTest.cpp @@ -0,0 +1,30 @@ +#include "cru/base/io/MemoryStream.h" +#include "cru/base/io/Stream.h" + +#include + +#include +#include +#include + +TEST_CASE("MemoryStream should work.", "[io][stream]") { + using namespace cru::io; + const int size = 100; + std::vector buffer(size); + + buffer[1] = std::byte(0xf0); + buffer[2] = std::byte(0x0f); + + MemoryStream stream(buffer.data(), size, true); + + REQUIRE(stream.CanRead()); + REQUIRE(!stream.CanWrite()); + + std::vector buffer2(size * 2); + + auto read = stream.Read(buffer2.data(), buffer2.size()); + auto read2 = stream.Read(buffer2.data(), 1); + REQUIRE(read == size); + REQUIRE(std::ranges::equal(buffer, buffer2 | std::views::take(size))); + REQUIRE(read2 == Stream::kEOF); +} -- cgit v1.2.3