diff options
author | c8ef <c8ef@outlook.com> | 2024-06-05 22:37:40 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-05 07:37:40 -0700 |
commit | 07b8990d38ebaf42b0ed1c60d49b484a6e2497e8 (patch) | |
tree | 4556b0021c27374a2b796f870a3bf636a006c17e /llvm/unittests/ADT/DenseMapTest.cpp | |
parent | 991d2fb3ea1135f0ce12af180fa1d5d899b9ea67 (diff) | |
download | llvm-07b8990d38ebaf42b0ed1c60d49b484a6e2497e8.zip llvm-07b8990d38ebaf42b0ed1c60d49b484a6e2497e8.tar.gz llvm-07b8990d38ebaf42b0ed1c60d49b484a6e2497e8.tar.bz2 |
[ADT] Add C++17-style insert_or_assign for DenseMap (#94151)
add C++17-style insert_or_assign for DenseMap
close: #94115
Diffstat (limited to 'llvm/unittests/ADT/DenseMapTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/DenseMapTest.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/DenseMapTest.cpp b/llvm/unittests/ADT/DenseMapTest.cpp index 09f9a57..cb45a6e 100644 --- a/llvm/unittests/ADT/DenseMapTest.cpp +++ b/llvm/unittests/ADT/DenseMapTest.cpp @@ -475,6 +475,42 @@ TEST(DenseMapCustomTest, ReserveTest) { } } +TEST(DenseMapCustomTest, InsertOrAssignTest) { + DenseMap<int, CountCopyAndMove> Map; + + CountCopyAndMove val1(1); + CountCopyAndMove::ResetCounts(); + auto try0 = Map.insert_or_assign(0, val1); + EXPECT_TRUE(try0.second); + EXPECT_EQ(0, CountCopyAndMove::TotalMoves()); + EXPECT_EQ(1, CountCopyAndMove::CopyConstructions); + EXPECT_EQ(0, CountCopyAndMove::CopyAssignments); + + CountCopyAndMove::ResetCounts(); + auto try1 = Map.insert_or_assign(0, val1); + EXPECT_FALSE(try1.second); + EXPECT_EQ(0, CountCopyAndMove::TotalMoves()); + EXPECT_EQ(0, CountCopyAndMove::CopyConstructions); + EXPECT_EQ(1, CountCopyAndMove::CopyAssignments); + + int key2 = 2; + CountCopyAndMove val2(2); + CountCopyAndMove::ResetCounts(); + auto try2 = Map.insert_or_assign(key2, std::move(val2)); + EXPECT_TRUE(try2.second); + EXPECT_EQ(0, CountCopyAndMove::TotalCopies()); + EXPECT_EQ(1, CountCopyAndMove::MoveConstructions); + EXPECT_EQ(0, CountCopyAndMove::MoveAssignments); + + CountCopyAndMove val3(3); + CountCopyAndMove::ResetCounts(); + auto try3 = Map.insert_or_assign(key2, std::move(val3)); + EXPECT_FALSE(try3.second); + EXPECT_EQ(0, CountCopyAndMove::TotalCopies()); + EXPECT_EQ(0, CountCopyAndMove::MoveConstructions); + EXPECT_EQ(1, CountCopyAndMove::MoveAssignments); +} + // Make sure DenseMap works with StringRef keys. TEST(DenseMapCustomTest, StringRefTest) { DenseMap<StringRef, int> M; |