24 #include "gmock/gmock.h"
25 #include "gtest/gtest.h"
26 #include "absl/base/config.h"
27 #include "absl/strings/internal/cord_rep_flat.h"
29 #include "absl/types/span.h"
43 return buffer.ConsumeValue(short_value);
51 constexpr
size_t kInlinedSize =
sizeof(CordBuffer) - 1;
58 constexpr
size_t k8KiB = 8 << 10;
59 constexpr
size_t k16KiB = 16 << 10;
60 constexpr
size_t k64KiB = 64 << 10;
61 constexpr
size_t k1MB = 1 << 20;
67 kInlinedSize + 1, kDefaultLimit - 1,
70 TEST_P(CordBufferTest, MaximumPayload) {
77 TEST(CordBufferTest, ConstructDefault) {
87 TEST(CordBufferTest, CreateSsoWithDefaultLimit) {
104 TEST_P(CordBufferTest, Available) {
105 const size_t requested = GetParam();
115 TEST_P(CordBufferTest, IncreaseLengthBy) {
116 const size_t requested = GetParam();
118 buffer.IncreaseLengthBy(2);
120 buffer.IncreaseLengthBy(5);
124 TEST_P(CordBufferTest, AvailableUpTo) {
125 const size_t requested = GetParam();
127 size_t expected_up_to = std::min<size_t>(3,
buffer.capacity());
132 expected_up_to = std::min<size_t>(3,
buffer.capacity() - 2);
138 size_t MaxCapacityFor(
size_t block_size,
size_t requested) {
144 TEST_P(CordBufferTest, CreateWithDefaultLimit) {
145 const size_t requested = GetParam();
155 buffer.SetLength(requested);
161 TEST(CordBufferTest, CreateWithDefaultLimitAskingFor2GB) {
162 constexpr
size_t k2GiB = 1U << 31;
173 TEST_P(CordBufferTest, MoveConstruct) {
174 const size_t requested = GetParam();
188 TEST_P(CordBufferTest, MoveAssign) {
189 const size_t requested = GetParam();
204 TEST_P(CordBufferTest, ConsumeValue) {
205 const size_t requested = GetParam();
211 if (cord_internal::CordRep*
rep =
221 TEST_P(CordBufferTest, CreateWithCustomLimitWithinDefaultLimit) {
222 const size_t requested = GetParam();
233 buffer.SetLength(requested);
239 TEST(CordLargeBufferTest, CreateAtOrBelowDefaultLimit) {
249 TEST(CordLargeBufferTest, CreateWithCustomLimit) {
260 TEST(CordLargeBufferTest, CreateWithTooLargeLimit) {
266 TEST(CordLargeBufferTest, CreateWithHugeValueForOverFlowHardening) {
267 for (
size_t dist_from_max = 0; dist_from_max <= 32; ++dist_from_max) {
274 for (
size_t limit =
kMaxFlatSize; limit <= kCustomLimit; limit *= 2) {
282 TEST(CordLargeBufferTest, CreateWithSmallLimit) {
303 TEST(CordLargeBufferTest, CreateWasteFull) {
305 const size_t requested = (15 << 10);
311 TEST(CordLargeBufferTest, CreateSmallSlop) {