From aad2c8a3966424bbaa2f26027d104d17f9c1c1ae Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Thu, 13 May 2021 11:31:11 -0700 Subject: Export of internal Abseil changes -- 912c205cf80c4ed24a08000c04263403857b7f75 by Abseil Team : Internal change PiperOrigin-RevId: 373620391 -- d454f10549d27d7b025d1ce0ef90a0cdec42c361 by Martijn Vels : Add SetCordRepForTesting() helper to CordzInfo PiperOrigin-RevId: 373602832 -- 7a2d7bdd2e60fb51333e81cd71ebd0a4edb60704 by Evan Brown : For StrAppend, make sure to follow exponential growth like std::string::append. PiperOrigin-RevId: 373589332 -- 24397f19bce45133a42feaa7c883009ef9325095 by Greg Falcon : Import of CCTZ from GitHub. PiperOrigin-RevId: 373569246 GitOrigin-RevId: 912c205cf80c4ed24a08000c04263403857b7f75 Change-Id: I5444f7ca2c0980685ca5c51596c259b845d69673 --- absl/strings/internal/resize_uninitialized_test.cc | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'absl/strings/internal/resize_uninitialized_test.cc') diff --git a/absl/strings/internal/resize_uninitialized_test.cc b/absl/strings/internal/resize_uninitialized_test.cc index 0f8b3c2a..01ee476b 100644 --- a/absl/strings/internal/resize_uninitialized_test.cc +++ b/absl/strings/internal/resize_uninitialized_test.cc @@ -24,11 +24,13 @@ int resize_call_count = 0; // resize() method has been called. struct resizable_string { size_t size() const { return 0; } + size_t capacity() const { return 0; } char& operator[](size_t) { static char c = '\0'; return c; } void resize(size_t) { resize_call_count += 1; } + void reserve(size_t) {} }; int resize_default_init_call_count = 0; @@ -37,12 +39,14 @@ int resize_default_init_call_count = 0; // resize() and __resize_default_init() methods have been called. struct resize_default_init_string { size_t size() const { return 0; } + size_t capacity() const { return 0; } char& operator[](size_t) { static char c = '\0'; return c; } void resize(size_t) { resize_call_count += 1; } void __resize_default_init(size_t) { resize_default_init_call_count += 1; } + void reserve(size_t) {} }; TEST(ResizeUninit, WithAndWithout) { @@ -60,6 +64,9 @@ TEST(ResizeUninit, WithAndWithout) { absl::strings_internal::STLStringResizeUninitialized(&rs, 237); EXPECT_EQ(resize_call_count, 1); EXPECT_EQ(resize_default_init_call_count, 0); + absl::strings_internal::STLStringResizeUninitializedAmortized(&rs, 1000); + EXPECT_EQ(resize_call_count, 2); + EXPECT_EQ(resize_default_init_call_count, 0); } resize_call_count = 0; @@ -76,7 +83,23 @@ TEST(ResizeUninit, WithAndWithout) { absl::strings_internal::STLStringResizeUninitialized(&rus, 237); EXPECT_EQ(resize_call_count, 0); EXPECT_EQ(resize_default_init_call_count, 1); + absl::strings_internal::STLStringResizeUninitializedAmortized(&rus, 1000); + EXPECT_EQ(resize_call_count, 0); + EXPECT_EQ(resize_default_init_call_count, 2); + } +} + +TEST(ResizeUninit, Amortized) { + std::string str; + size_t prev_cap = str.capacity(); + int cap_increase_count = 0; + for (int i = 0; i < 1000; ++i) { + absl::strings_internal::STLStringResizeUninitializedAmortized(&str, i); + size_t new_cap = str.capacity(); + if (new_cap > prev_cap) ++cap_increase_count; + prev_cap = new_cap; } + EXPECT_LT(cap_increase_count, 50); } } // namespace -- cgit v1.2.3