Skip to content

Commit 635c53f

Browse files
goldvitalycopybara-github
authored andcommitted
Add extra tests for working with reserved tables.
PiperOrigin-RevId: 920556603 Change-Id: Id9ed97bf11f424abf7fc5d0095bdfd78d97b9100
1 parent 54615fe commit 635c53f

1 file changed

Lines changed: 68 additions & 0 deletions

File tree

absl/container/internal/raw_hash_set_test.cc

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
11951263
template <class TableType>
11961264
class SmallTableResizeTest : public testing::Test {};
11971265

0 commit comments

Comments
 (0)