aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/DenseMapTest.cpp
diff options
context:
space:
mode:
authorc8ef <c8ef@outlook.com>2024-06-05 22:37:40 +0800
committerGitHub <noreply@github.com>2024-06-05 07:37:40 -0700
commit07b8990d38ebaf42b0ed1c60d49b484a6e2497e8 (patch)
tree4556b0021c27374a2b796f870a3bf636a006c17e /llvm/unittests/ADT/DenseMapTest.cpp
parent991d2fb3ea1135f0ce12af180fa1d5d899b9ea67 (diff)
downloadllvm-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.cpp36
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;