@@ -591,6 +591,41 @@ TEST(DenseMapCustomTest, InsertOrAssignTest) {
591
591
EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
592
592
}
593
593
594
+ TEST (DenseMapCustomTest, EmplaceOrAssign) {
595
+ DenseMap<int , CountCopyAndMove> Map;
596
+
597
+ CountCopyAndMove::ResetCounts ();
598
+ auto Try0 = Map.emplace_or_assign (3 , 3 );
599
+ EXPECT_TRUE (Try0.second );
600
+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
601
+ EXPECT_EQ (0 , CountCopyAndMove::TotalMoves ());
602
+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
603
+
604
+ CountCopyAndMove::ResetCounts ();
605
+ auto Try1 = Map.emplace_or_assign (3 , 4 );
606
+ EXPECT_FALSE (Try1.second );
607
+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
608
+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
609
+ EXPECT_EQ (0 , CountCopyAndMove::MoveConstructions);
610
+ EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
611
+
612
+ int Key = 5 ;
613
+ CountCopyAndMove::ResetCounts ();
614
+ auto Try2 = Map.emplace_or_assign (Key, 3 );
615
+ EXPECT_TRUE (Try2.second );
616
+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
617
+ EXPECT_EQ (0 , CountCopyAndMove::TotalMoves ());
618
+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
619
+
620
+ CountCopyAndMove::ResetCounts ();
621
+ auto Try3 = Map.emplace_or_assign (Key, 4 );
622
+ EXPECT_FALSE (Try3.second );
623
+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
624
+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
625
+ EXPECT_EQ (0 , CountCopyAndMove::MoveConstructions);
626
+ EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
627
+ }
628
+
594
629
// Make sure DenseMap works with StringRef keys.
595
630
TEST (DenseMapCustomTest, StringRefTest) {
596
631
DenseMap<StringRef, int > M;
0 commit comments