diff options
| author | 2022-12-19 22:40:50 -0500 | |
|---|---|---|
| committer | 2022-12-19 22:40:50 -0500 | |
| commit | c6590ad07b384762fd90ee8852796ec681a69286 (patch) | |
| tree | c0d8d2d157f3bb4be01331f2da459c0f68ca4d7b /src/tests | |
| parent | tests: Add ScratchBuffer tests (diff) | |
| download | yuzu-c6590ad07b384762fd90ee8852796ec681a69286.tar.gz yuzu-c6590ad07b384762fd90ee8852796ec681a69286.tar.xz yuzu-c6590ad07b384762fd90ee8852796ec681a69286.zip | |
scratch_buffer: Explicitly defing resize and resize_destructive functions
resize keeps previous data intact when the buffer grows
resize_destructive destroys the previous data when the buffer grows
Diffstat (limited to 'src/tests')
| -rw-r--r-- | src/tests/common/scratch_buffer.cpp | 78 |
1 files changed, 75 insertions, 3 deletions
diff --git a/src/tests/common/scratch_buffer.cpp b/src/tests/common/scratch_buffer.cpp index a59490f55..b602c8d0a 100644 --- a/src/tests/common/scratch_buffer.cpp +++ b/src/tests/common/scratch_buffer.cpp | |||
| @@ -29,7 +29,7 @@ TEST_CASE("ScratchBuffer: Basic Test", "[common]") { | |||
| 29 | } | 29 | } |
| 30 | } | 30 | } |
| 31 | 31 | ||
| 32 | TEST_CASE("ScratchBuffer: Resize Grow", "[common]") { | 32 | TEST_CASE("ScratchBuffer: resize_destructive Grow", "[common]") { |
| 33 | std::array<u8, 10> payload; | 33 | std::array<u8, 10> payload; |
| 34 | payload.fill(66); | 34 | payload.fill(66); |
| 35 | 35 | ||
| @@ -38,14 +38,86 @@ TEST_CASE("ScratchBuffer: Resize Grow", "[common]") { | |||
| 38 | REQUIRE(buf.capacity() == payload.size()); | 38 | REQUIRE(buf.capacity() == payload.size()); |
| 39 | 39 | ||
| 40 | // Increasing the size should reallocate the buffer | 40 | // Increasing the size should reallocate the buffer |
| 41 | buf.resize(payload.size() * 2); | 41 | buf.resize_destructive(payload.size() * 2); |
| 42 | REQUIRE(buf.size() == payload.size() * 2); | 42 | REQUIRE(buf.size() == payload.size() * 2); |
| 43 | REQUIRE(buf.capacity() == payload.size() * 2); | 43 | REQUIRE(buf.capacity() == payload.size() * 2); |
| 44 | 44 | ||
| 45 | // Since the buffer is not value initialized, reading its data will be garbage | 45 | // Since the buffer is not value initialized, reading its data will be garbage |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | TEST_CASE("ScratchBuffer: Resize Shrink", "[common]") { | 48 | TEST_CASE("ScratchBuffer: resize_destructive Shrink", "[common]") { |
| 49 | std::array<u8, 10> payload; | ||
| 50 | payload.fill(66); | ||
| 51 | |||
| 52 | ScratchBuffer<u8> buf(payload.size()); | ||
| 53 | REQUIRE(buf.size() == payload.size()); | ||
| 54 | REQUIRE(buf.capacity() == payload.size()); | ||
| 55 | |||
| 56 | std::memcpy(buf.data(), payload.data(), payload.size()); | ||
| 57 | for (size_t i = 0; i < payload.size(); ++i) { | ||
| 58 | REQUIRE(buf[i] == payload[i]); | ||
| 59 | } | ||
| 60 | |||
| 61 | // Decreasing the size should not cause a buffer reallocation | ||
| 62 | // This can be tested by ensuring the buffer capacity and data has not changed, | ||
| 63 | buf.resize_destructive(1U); | ||
| 64 | REQUIRE(buf.size() == 1U); | ||
| 65 | REQUIRE(buf.capacity() == payload.size()); | ||
| 66 | |||
| 67 | for (size_t i = 0; i < payload.size(); ++i) { | ||
| 68 | REQUIRE(buf[i] == payload[i]); | ||
| 69 | } | ||
| 70 | } | ||
| 71 | |||
| 72 | TEST_CASE("ScratchBuffer: resize Grow u8", "[common]") { | ||
| 73 | std::array<u8, 10> payload; | ||
| 74 | payload.fill(66); | ||
| 75 | |||
| 76 | ScratchBuffer<u8> buf(payload.size()); | ||
| 77 | REQUIRE(buf.size() == payload.size()); | ||
| 78 | REQUIRE(buf.capacity() == payload.size()); | ||
| 79 | |||
| 80 | std::memcpy(buf.data(), payload.data(), payload.size()); | ||
| 81 | for (size_t i = 0; i < payload.size(); ++i) { | ||
| 82 | REQUIRE(buf[i] == payload[i]); | ||
| 83 | } | ||
| 84 | |||
| 85 | // Increasing the size should reallocate the buffer | ||
| 86 | buf.resize(payload.size() * 2); | ||
| 87 | REQUIRE(buf.size() == payload.size() * 2); | ||
| 88 | REQUIRE(buf.capacity() == payload.size() * 2); | ||
| 89 | |||
| 90 | // resize() keeps the previous data intact | ||
| 91 | for (size_t i = 0; i < payload.size(); ++i) { | ||
| 92 | REQUIRE(buf[i] == payload[i]); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | |||
| 96 | TEST_CASE("ScratchBuffer: resize Grow u64", "[common]") { | ||
| 97 | std::array<u64, 10> payload; | ||
| 98 | payload.fill(6666); | ||
| 99 | |||
| 100 | ScratchBuffer<u64> buf(payload.size()); | ||
| 101 | REQUIRE(buf.size() == payload.size()); | ||
| 102 | REQUIRE(buf.capacity() == payload.size()); | ||
| 103 | |||
| 104 | std::memcpy(buf.data(), payload.data(), payload.size() * sizeof(u64)); | ||
| 105 | for (size_t i = 0; i < payload.size(); ++i) { | ||
| 106 | REQUIRE(buf[i] == payload[i]); | ||
| 107 | } | ||
| 108 | |||
| 109 | // Increasing the size should reallocate the buffer | ||
| 110 | buf.resize(payload.size() * 2); | ||
| 111 | REQUIRE(buf.size() == payload.size() * 2); | ||
| 112 | REQUIRE(buf.capacity() == payload.size() * 2); | ||
| 113 | |||
| 114 | // resize() keeps the previous data intact | ||
| 115 | for (size_t i = 0; i < payload.size(); ++i) { | ||
| 116 | REQUIRE(buf[i] == payload[i]); | ||
| 117 | } | ||
| 118 | } | ||
| 119 | |||
| 120 | TEST_CASE("ScratchBuffer: resize Shrink", "[common]") { | ||
| 49 | std::array<u8, 10> payload; | 121 | std::array<u8, 10> payload; |
| 50 | payload.fill(66); | 122 | payload.fill(66); |
| 51 | 123 | ||