@@ -1192,6 +1192,74 @@ TYPED_TEST(SooTest, ClearDifferentSizes) {
11921192 }
11931193}
11941194
1195+ TYPED_TEST (SooTest, ReserveTwice) {
1196+ for (size_t reserve_size = 0 ; reserve_size < 32 ; ++reserve_size) {
1197+ for (size_t reserve_size2 = reserve_size; reserve_size2 < 32 ;
1198+ ++reserve_size2) {
1199+ SCOPED_TRACE (absl::StrCat (" reserve_size: " , reserve_size,
1200+ " , reserve_size2: " , reserve_size2));
1201+ TypeParam t;
1202+ t.reserve (reserve_size);
1203+ { // Insert first batch of elements.
1204+ size_t cap = t.capacity ();
1205+ for (size_t i = 0 ; i < reserve_size; ++i) {
1206+ ASSERT_TRUE (t.insert (static_cast <int >(i)).second ) << i;
1207+ }
1208+ ASSERT_EQ (t.capacity (), cap);
1209+ }
1210+ t.reserve (reserve_size2);
1211+ { // Insert second batch of elements.
1212+ size_t cap = t.capacity ();
1213+ for (size_t i = reserve_size; i < reserve_size2; ++i) {
1214+ ASSERT_TRUE (t.insert (static_cast <int >(i)).second ) << i;
1215+ }
1216+ ASSERT_EQ (t.capacity (), cap);
1217+ }
1218+ for (size_t i = 0 ; i < reserve_size2; ++i) {
1219+ ASSERT_TRUE (t.contains (static_cast <int >(i))) << i;
1220+ }
1221+ }
1222+ }
1223+ }
1224+
1225+ TYPED_TEST (SooTest, GrowAfterReserve) {
1226+ for (size_t reserve_size = 1 ; reserve_size <= 150 ; ++reserve_size) {
1227+ size_t size = reserve_size + 1 ;
1228+ TypeParam s;
1229+ s.reserve (reserve_size);
1230+ for (size_t i = 0 ; i < size; ++i) {
1231+ ASSERT_TRUE (s.insert (static_cast <int >(i)).second ) << i;
1232+ }
1233+ EXPECT_EQ (s.size (), size);
1234+ for (size_t i = 0 ; i < size; ++i) {
1235+ ASSERT_TRUE (s.contains (static_cast <int >(i))) << i;
1236+ }
1237+ }
1238+ }
1239+
1240+ TYPED_TEST (SooTest, ClearAfterReserve) {
1241+ for (size_t reserve_size :
1242+ std::vector<size_t >{1 , 3 , 4 , 6 , 7 , 8 , 13 , 14 , 15 , 128 , 150 }) {
1243+ TypeParam s;
1244+ s.reserve (reserve_size);
1245+ for (size_t i = 0 ; i < reserve_size; ++i) {
1246+ ASSERT_TRUE (s.insert (static_cast <int >(i)).second );
1247+ }
1248+ EXPECT_EQ (s.size (), reserve_size);
1249+ s.clear ();
1250+ EXPECT_EQ (s.size (), 0 );
1251+ for (size_t i = 0 ; i < reserve_size; ++i) {
1252+ ASSERT_FALSE (s.contains (static_cast <int >(i))) << i;
1253+ }
1254+ for (size_t i = 0 ; i < reserve_size; ++i) {
1255+ ASSERT_TRUE (s.insert (static_cast <int >(i)).second ) << i;
1256+ }
1257+ for (size_t i = 0 ; i < reserve_size; ++i) {
1258+ ASSERT_TRUE (s.contains (static_cast <int >(i))) << i;
1259+ }
1260+ }
1261+ }
1262+
11951263template <class TableType >
11961264class SmallTableResizeTest : public testing ::Test {};
11971265
0 commit comments