#include #include #include #include #include TEST_CASE("[System] sf::MemoryInputStream") { SECTION("Type traits") { STATIC_CHECK(std::is_copy_constructible_v); STATIC_CHECK(std::is_copy_assignable_v); STATIC_CHECK(std::is_nothrow_move_constructible_v); STATIC_CHECK(std::is_nothrow_move_assignable_v); } SECTION("Default constructor") { sf::MemoryInputStream memoryInputStream; CHECK(memoryInputStream.read(nullptr, 0) == std::nullopt); CHECK(memoryInputStream.seek(0) == std::nullopt); CHECK(memoryInputStream.tell() == std::nullopt); CHECK(memoryInputStream.getSize() == std::nullopt); } using namespace std::literals::string_view_literals; SECTION("open()") { sf::MemoryInputStream memoryInputStream; memoryInputStream.open(nullptr, 0); CHECK(memoryInputStream.tell() == std::nullopt); CHECK(memoryInputStream.getSize() == std::nullopt); static constexpr auto input = "hello world"sv; memoryInputStream.open(input.data(), input.size()); CHECK(memoryInputStream.tell().value() == 0); CHECK(memoryInputStream.getSize().value() == input.size()); } SECTION("read()") { static constexpr auto input = "hello world"sv; sf::MemoryInputStream memoryInputStream; memoryInputStream.open(input.data(), input.size()); CHECK(memoryInputStream.tell().value() == 0); CHECK(memoryInputStream.getSize().value() == input.size()); // Read within input std::array output{}; CHECK(memoryInputStream.read(output.data(), 5).value() == 5); CHECK(std::string_view(output.data(), 5) == "hello"sv); CHECK(memoryInputStream.tell().value() == 5); CHECK(memoryInputStream.getSize().value() == input.size()); // Read beyond input CHECK(memoryInputStream.read(output.data(), 100).value() == 6); CHECK(std::string_view(output.data(), 6) == " world"sv); CHECK(memoryInputStream.tell().value() == 11); CHECK(memoryInputStream.getSize().value() == input.size()); } SECTION("seek()") { static constexpr auto input = "We Love SFML!"sv; sf::MemoryInputStream memoryInputStream; memoryInputStream.open(input.data(), input.size()); CHECK(memoryInputStream.tell().value() == 0); CHECK(memoryInputStream.getSize().value() == input.size()); SECTION("Seek within input") { CHECK(memoryInputStream.seek(0).value() == 0); CHECK(memoryInputStream.tell().value() == 0); CHECK(memoryInputStream.seek(5).value() == 5); CHECK(memoryInputStream.tell().value() == 5); } SECTION("Seek beyond input") { CHECK(memoryInputStream.seek(1'000).value() == input.size()); CHECK(memoryInputStream.tell().value() == input.size()); } } }