diff options
author | Ramkumar Ramachandra <ramkumar.ramachandra@codasip.com> | 2025-05-08 11:25:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-08 11:25:22 +0100 |
commit | 20169cb4ac328be419033eda26555d2d79898b84 (patch) | |
tree | da5223c5f54d3607c9e3d0f8ac22312c2b7a93c3 /llvm/unittests/ADT/DenseMapTest.cpp | |
parent | 4eebc8d003f25adf52a75702d6ee24f69330d920 (diff) | |
download | llvm-20169cb4ac328be419033eda26555d2d79898b84.zip llvm-20169cb4ac328be419033eda26555d2d79898b84.tar.gz llvm-20169cb4ac328be419033eda26555d2d79898b84.tar.bz2 |
[DenseMap] Introduce emplace_or_assign (#138886)
Introduce emplace_or_assign, a variant of insert_or_assign that has
slightly better characteristics.
Diffstat (limited to 'llvm/unittests/ADT/DenseMapTest.cpp')
-rw-r--r-- | llvm/unittests/ADT/DenseMapTest.cpp | 35 |
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; |