1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[ADT] Add a pop_back_val method to the SparseSet container.

The next commit will use it.

llvm-svn: 263455
This commit is contained in:
Quentin Colombet 2016-03-14 18:10:41 +00:00
parent 3b7d2db4ef
commit 573b41c165
2 changed files with 25 additions and 0 deletions

View File

@ -263,6 +263,11 @@ public:
return *insert(ValueT(Key)).first;
}
ValueT pop_back_val() {
// Sparse does not need to be cleared, see find().
return Dense.pop_back_val();
}
/// erase - Erases an existing element identified by a valid iterator.
///
/// This invalidates all iterators, but erase() returns an iterator pointing

View File

@ -183,4 +183,24 @@ TEST(SparseSetTest, AltStructSet) {
EXPECT_FALSE(Set.erase(5));
EXPECT_TRUE(Set.erase(6));
}
TEST(SparseSetTest, PopBack) {
USet Set;
const unsigned UpperBound = 300;
Set.setUniverse(UpperBound);
for (unsigned i = 0; i < UpperBound; ++i)
Set.insert(i);
// Make sure pop back returns the values in the reverse order we
// inserted them.
unsigned Expected = UpperBound;
while (!Set.empty())
ASSERT_TRUE(--Expected == Set.pop_back_val());
// Insert again the same elements in the sparse set and make sure
// each insertion actually inserts the elements. I.e., check
// that the underlying data structure are properly cleared.
for (unsigned i = 0; i < UpperBound; ++i)
ASSERT_TRUE(Set.insert(i).second);
}
} // namespace