aboutsummaryrefslogtreecommitdiff
path: root/llvm/unittests/ADT/DenseMapTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/unittests/ADT/DenseMapTest.cpp')
-rw-r--r--llvm/unittests/ADT/DenseMapTest.cpp35
1 files changed, 35 insertions, 0 deletions
diff --git a/llvm/unittests/ADT/DenseMapTest.cpp b/llvm/unittests/ADT/DenseMapTest.cpp
index 2bf0f90..d002a3c 100644
--- a/llvm/unittests/ADT/DenseMapTest.cpp
+++ b/llvm/unittests/ADT/DenseMapTest.cpp
@@ -591,6 +591,41 @@ TEST(DenseMapCustomTest, InsertOrAssignTest) {
EXPECT_EQ(1, CountCopyAndMove::MoveAssignments);
}
+TEST(DenseMapCustomTest, EmplaceOrAssign) {
+ DenseMap<int, CountCopyAndMove> Map;
+
+ CountCopyAndMove::ResetCounts();
+ auto Try0 = Map.emplace_or_assign(3, 3);
+ EXPECT_TRUE(Try0.second);
+ EXPECT_EQ(0, CountCopyAndMove::TotalCopies());
+ EXPECT_EQ(0, CountCopyAndMove::TotalMoves());
+ EXPECT_EQ(1, CountCopyAndMove::ValueConstructions);
+
+ CountCopyAndMove::ResetCounts();
+ auto Try1 = Map.emplace_or_assign(3, 4);
+ EXPECT_FALSE(Try1.second);
+ EXPECT_EQ(0, CountCopyAndMove::TotalCopies());
+ EXPECT_EQ(1, CountCopyAndMove::ValueConstructions);
+ EXPECT_EQ(0, CountCopyAndMove::MoveConstructions);
+ EXPECT_EQ(1, CountCopyAndMove::MoveAssignments);
+
+ int Key = 5;
+ CountCopyAndMove::ResetCounts();
+ auto Try2 = Map.emplace_or_assign(Key, 3);
+ EXPECT_TRUE(Try2.second);
+ EXPECT_EQ(0, CountCopyAndMove::TotalCopies());
+ EXPECT_EQ(0, CountCopyAndMove::TotalMoves());
+ EXPECT_EQ(1, CountCopyAndMove::ValueConstructions);
+
+ CountCopyAndMove::ResetCounts();
+ auto Try3 = Map.emplace_or_assign(Key, 4);
+ EXPECT_FALSE(Try3.second);
+ EXPECT_EQ(0, CountCopyAndMove::TotalCopies());
+ EXPECT_EQ(1, CountCopyAndMove::ValueConstructions);
+ EXPECT_EQ(0, CountCopyAndMove::MoveConstructions);
+ EXPECT_EQ(1, CountCopyAndMove::MoveAssignments);
+}
+
// Make sure DenseMap works with StringRef keys.
TEST(DenseMapCustomTest, StringRefTest) {
DenseMap<StringRef, int> M;