Lines Matching full:chunk
15 #include "pw_multibuf/chunk.h"
42 static_assert(std::ranges::contiguous_range<Chunk>);
47 TEST(Chunk, IsImplicitlyConvertibleToSpan) { in TEST() argument
49 std::optional<OwnedChunk> chunk = in TEST() local
52 ASSERT_TRUE(chunk.has_value()); in TEST()
53 // ``Chunk`` should convert to ``ByteSpan``. in TEST()
54 TakesSpan(**chunk); in TEST()
67 auto& chunk = *chunk_opt; in TEST() local
69 EXPECT_EQ(chunk.size(), kArbitraryChunkSize); in TEST()
71 chunk.Release(); in TEST()
72 EXPECT_EQ(chunk.size(), 0_size); in TEST()
86 std::optional<OwnedChunk> chunk = tracker->CreateFirstChunk(); in TEST() local
87 ASSERT_TRUE(chunk.has_value()); in TEST()
89 EXPECT_EQ(chunk->size(), kArbitraryChunkSize); in TEST()
96 TEST(Chunk, DiscardPrefixDiscardsPrefixOfSpan) { in TEST() argument
102 auto& chunk = *chunk_opt; in TEST() local
103 ConstByteSpan old_span = chunk; in TEST()
105 chunk->DiscardPrefix(kDiscarded); in TEST()
106 EXPECT_EQ(chunk.size(), old_span.size() - kDiscarded); in TEST()
107 EXPECT_EQ(chunk.data(), old_span.data() + kDiscarded); in TEST()
110 TEST(Chunk, TakePrefixTakesPrefixOfSpan) { in TEST() argument
116 auto& chunk = *chunk_opt; in TEST() local
117 ConstByteSpan old_span = chunk; in TEST()
119 std::optional<OwnedChunk> front_opt = chunk->TakePrefix(kTaken); in TEST()
124 EXPECT_EQ(chunk.size(), old_span.size() - kTaken); in TEST()
125 EXPECT_EQ(chunk.data(), old_span.data() + kTaken); in TEST()
128 TEST(Chunk, TruncateDiscardsEndOfSpan) { in TEST() argument
134 auto& chunk = *chunk_opt; in TEST() local
135 ConstByteSpan old_span = chunk; in TEST()
137 chunk->Truncate(old_span.size() - kShorter); in TEST()
138 EXPECT_EQ(chunk.size(), old_span.size() - kShorter); in TEST()
139 EXPECT_EQ(chunk.data(), old_span.data()); in TEST()
142 TEST(Chunk, TakeSuffixTakesEndOfSpan) { in TEST() argument
148 auto& chunk = *chunk_opt; in TEST() local
149 ConstByteSpan old_span = chunk; in TEST()
151 std::optional<OwnedChunk> tail_opt = chunk->TakeSuffix(kTaken); in TEST()
156 EXPECT_EQ(chunk.size(), old_span.size() - kTaken); in TEST()
157 EXPECT_EQ(chunk.data(), old_span.data()); in TEST()
160 TEST(Chunk, SliceRemovesSidesOfSpan) { in TEST() argument
166 auto& chunk = *chunk_opt; in TEST() local
167 ConstByteSpan old_span = chunk; in TEST()
170 chunk->Slice(kBegin, kEnd); in TEST()
171 EXPECT_EQ(chunk.data(), old_span.data() + kBegin); in TEST()
172 EXPECT_EQ(chunk.size(), kEnd - kBegin); in TEST()
175 TEST(Chunk, RegionPersistsUntilAllChunksReleased) { in TEST() argument
182 auto& chunk = *chunk_opt; in TEST() local
183 // One allocation for the region tracker, one for the chunk. in TEST()
186 auto split_opt = chunk->TakePrefix(kSplitPoint); in TEST()
191 chunk.Release(); in TEST()
197 TEST(Chunk, ClaimPrefixReclaimsDiscardedPrefix) { in TEST() argument
203 auto& chunk = *chunk_opt; in TEST() local
204 ConstByteSpan old_span = chunk; in TEST()
206 chunk->DiscardPrefix(kDiscarded); in TEST()
207 EXPECT_TRUE(chunk->ClaimPrefix(kDiscarded)); in TEST()
208 EXPECT_EQ(chunk.size(), old_span.size()); in TEST()
209 EXPECT_EQ(chunk.data(), old_span.data()); in TEST()
212 TEST(Chunk, ClaimPrefixFailsOnFullRegionChunk) { in TEST() argument
218 auto& chunk = *chunk_opt; in TEST() local
219 EXPECT_FALSE(chunk->ClaimPrefix(1)); in TEST()
222 TEST(Chunk, ClaimPrefixFailsOnNeighboringChunk) { in TEST() argument
228 auto& chunk = *chunk_opt; in TEST() local
230 auto front = chunk->TakePrefix(kSplitPoint); in TEST()
232 EXPECT_FALSE(chunk->ClaimPrefix(1)); in TEST()
235 TEST(Chunk, in TEST() argument
242 auto& chunk = *chunk_opt; in TEST() local
244 auto split = chunk->TakeSuffix(kTaken); in TEST()
247 EXPECT_FALSE(chunk->ClaimPrefix(1)); in TEST()
250 TEST(Chunk, ClaimPrefixReclaimsPrecedingChunksDiscardedSuffix) { in TEST() argument
256 auto& chunk = *chunk_opt; in TEST() local
258 auto split_opt = chunk->TakePrefix(kSplitPoint); in TEST()
263 EXPECT_TRUE(chunk->ClaimPrefix(kDiscard)); in TEST()
264 EXPECT_FALSE(chunk->ClaimPrefix(1)); in TEST()
267 TEST(Chunk, ClaimSuffixReclaimsTruncatedEnd) { in TEST() argument
273 auto& chunk = *chunk_opt; in TEST() local
274 ConstByteSpan old_span = *chunk; in TEST()
276 chunk->Truncate(old_span.size() - kDiscarded); in TEST()
277 EXPECT_TRUE(chunk->ClaimSuffix(kDiscarded)); in TEST()
278 EXPECT_EQ(chunk->size(), old_span.size()); in TEST()
279 EXPECT_EQ(chunk->data(), old_span.data()); in TEST()
282 TEST(Chunk, ClaimSuffixFailsOnFullRegionChunk) { in TEST() argument
288 auto& chunk = *chunk_opt; in TEST() local
289 EXPECT_FALSE(chunk->ClaimSuffix(1)); in TEST()
292 TEST(Chunk, ClaimSuffixFailsWithNeighboringChunk) { in TEST() argument
298 auto& chunk = *chunk_opt; in TEST() local
300 auto split_opt = chunk->TakePrefix(kSplitPoint); in TEST()
306 TEST(Chunk, ClaimSuffixFailsAtEndOfRegionEvenAfterReleasingFirstChunkInRegion) { in TEST() argument
312 auto& chunk = *chunk_opt; in TEST() local
314 auto split_opt = chunk->TakeSuffix(kTaken); in TEST()
320 TEST(Chunk, ClaimSuffixReclaimsFollowingChunksDiscardedPrefix) { in TEST() argument
326 auto& chunk = *chunk_opt; in TEST() local
328 auto split_opt = chunk->TakePrefix(kSplitPoint); in TEST()
332 chunk->DiscardPrefix(kDiscarded); in TEST()
337 TEST(Chunk, MergeReturnsFalseForChunksFromDifferentRegions) { in TEST() argument
351 // Ensure that neither chunk was modified in TEST()
356 TEST(Chunk, MergeReturnsFalseForNonAdjacentChunksFromSameRegion) { in TEST() argument
382 TEST(Chunk, MergeJoinsMultipleAdjacentChunksFromSameRegion) { in TEST() argument
411 TEST(Chunk, MergeJoinsAdjacentChunksFromSameRegion) { in TEST() argument