summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
authorGravatar ameerj2022-12-19 22:40:50 -0500
committerGravatar ameerj2022-12-19 22:40:50 -0500
commitc6590ad07b384762fd90ee8852796ec681a69286 (patch)
treec0d8d2d157f3bb4be01331f2da459c0f68ca4d7b /src/tests
parenttests: Add ScratchBuffer tests (diff)
downloadyuzu-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.cpp78
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
32TEST_CASE("ScratchBuffer: Resize Grow", "[common]") { 32TEST_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
48TEST_CASE("ScratchBuffer: Resize Shrink", "[common]") { 48TEST_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
72TEST_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
96TEST_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
120TEST_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