1919namespace {
2020
2121int resize_call_count = 0 ;
22+ int append_call_count = 0 ;
2223
2324// A mock string class whose only purpose is to track how many times its
24- // resize() method has been called.
25+ // resize()/append() methods have been called.
2526struct resizable_string {
27+ using value_type = char ;
2628 size_t size () const { return 0 ; }
2729 size_t capacity () const { return 0 ; }
2830 char & operator [](size_t ) {
2931 static char c = ' \0 ' ;
3032 return c;
3133 }
3234 void resize (size_t ) { resize_call_count += 1 ; }
35+ void append (size_t , value_type) { append_call_count += 1 ; }
3336 void reserve (size_t ) {}
37+ resizable_string& erase (size_t = 0 , size_t = 0 ) { return *this ; }
3438};
3539
3640int resize_default_init_call_count = 0 ;
41+ int append_default_init_call_count = 0 ;
3742
3843// A mock string class whose only purpose is to track how many times its
39- // resize() and __resize_default_init() methods have been called.
40- struct resize_default_init_string {
44+ // resize()/__resize_default_init()/append()/__append_default_init() methods
45+ // have been called.
46+ struct default_init_string {
4147 size_t size () const { return 0 ; }
4248 size_t capacity () const { return 0 ; }
4349 char & operator [](size_t ) {
@@ -46,46 +52,68 @@ struct resize_default_init_string {
4652 }
4753 void resize (size_t ) { resize_call_count += 1 ; }
4854 void __resize_default_init (size_t ) { resize_default_init_call_count += 1 ; }
55+ void __append_default_init (size_t ) { append_default_init_call_count += 1 ; }
4956 void reserve (size_t ) {}
57+ default_init_string& erase (size_t = 0 , size_t = 0 ) { return *this ; }
5058};
5159
5260TEST (ResizeUninit, WithAndWithout) {
5361 resize_call_count = 0 ;
62+ append_call_count = 0 ;
5463 resize_default_init_call_count = 0 ;
64+ append_default_init_call_count = 0 ;
5565 {
5666 resizable_string rs;
5767
5868 EXPECT_EQ (resize_call_count, 0 );
69+ EXPECT_EQ (append_call_count, 0 );
5970 EXPECT_EQ (resize_default_init_call_count, 0 );
71+ EXPECT_EQ (append_default_init_call_count, 0 );
6072 EXPECT_FALSE (
6173 absl::strings_internal::STLStringSupportsNontrashingResize (&rs));
6274 EXPECT_EQ (resize_call_count, 0 );
75+ EXPECT_EQ (append_call_count, 0 );
6376 EXPECT_EQ (resize_default_init_call_count, 0 );
77+ EXPECT_EQ (append_default_init_call_count, 0 );
6478 absl::strings_internal::STLStringResizeUninitialized (&rs, 237 );
6579 EXPECT_EQ (resize_call_count, 1 );
80+ EXPECT_EQ (append_call_count, 0 );
6681 EXPECT_EQ (resize_default_init_call_count, 0 );
82+ EXPECT_EQ (append_default_init_call_count, 0 );
6783 absl::strings_internal::STLStringResizeUninitializedAmortized (&rs, 1000 );
68- EXPECT_EQ (resize_call_count, 2 );
84+ EXPECT_EQ (resize_call_count, 1 );
85+ EXPECT_EQ (append_call_count, 1 );
6986 EXPECT_EQ (resize_default_init_call_count, 0 );
87+ EXPECT_EQ (append_default_init_call_count, 0 );
7088 }
7189
7290 resize_call_count = 0 ;
91+ append_call_count = 0 ;
7392 resize_default_init_call_count = 0 ;
93+ append_default_init_call_count = 0 ;
7494 {
75- resize_default_init_string rus;
95+ default_init_string rus;
7696
7797 EXPECT_EQ (resize_call_count, 0 );
98+ EXPECT_EQ (append_call_count, 0 );
7899 EXPECT_EQ (resize_default_init_call_count, 0 );
100+ EXPECT_EQ (append_default_init_call_count, 0 );
79101 EXPECT_TRUE (
80102 absl::strings_internal::STLStringSupportsNontrashingResize (&rus));
81103 EXPECT_EQ (resize_call_count, 0 );
104+ EXPECT_EQ (append_call_count, 0 );
82105 EXPECT_EQ (resize_default_init_call_count, 0 );
106+ EXPECT_EQ (append_default_init_call_count, 0 );
83107 absl::strings_internal::STLStringResizeUninitialized (&rus, 237 );
84108 EXPECT_EQ (resize_call_count, 0 );
109+ EXPECT_EQ (append_call_count, 0 );
85110 EXPECT_EQ (resize_default_init_call_count, 1 );
111+ EXPECT_EQ (append_default_init_call_count, 0 );
86112 absl::strings_internal::STLStringResizeUninitializedAmortized (&rus, 1000 );
87113 EXPECT_EQ (resize_call_count, 0 );
88- EXPECT_EQ (resize_default_init_call_count, 2 );
114+ EXPECT_EQ (append_call_count, 0 );
115+ EXPECT_EQ (resize_default_init_call_count, 1 );
116+ EXPECT_EQ (append_default_init_call_count, 1 );
89117 }
90118}
91119
0 commit comments