@@ -545,6 +545,41 @@ TEST(DenseMapCustomTest, InsertOrAssignTest) {
545545 EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
546546}
547547
548+ TEST (DenseMapCustomTest, EmplaceOrAssign) {
549+ DenseMap<int , CountCopyAndMove> Map;
550+
551+ CountCopyAndMove::ResetCounts ();
552+ auto Try0 = Map.emplace_or_assign (3 , 3 );
553+ EXPECT_TRUE (Try0.second );
554+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
555+ EXPECT_EQ (0 , CountCopyAndMove::TotalMoves ());
556+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
557+
558+ CountCopyAndMove::ResetCounts ();
559+ auto Try1 = Map.emplace_or_assign (3 , 4 );
560+ EXPECT_FALSE (Try1.second );
561+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
562+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
563+ EXPECT_EQ (0 , CountCopyAndMove::MoveConstructions);
564+ EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
565+
566+ int Key = 5 ;
567+ CountCopyAndMove::ResetCounts ();
568+ auto Try2 = Map.emplace_or_assign (Key, 3 );
569+ EXPECT_TRUE (Try2.second );
570+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
571+ EXPECT_EQ (0 , CountCopyAndMove::TotalMoves ());
572+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
573+
574+ CountCopyAndMove::ResetCounts ();
575+ auto Try3 = Map.emplace_or_assign (Key, 4 );
576+ EXPECT_FALSE (Try3.second );
577+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
578+ EXPECT_EQ (1 , CountCopyAndMove::ValueConstructions);
579+ EXPECT_EQ (0 , CountCopyAndMove::MoveConstructions);
580+ EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
581+ }
582+
548583// Make sure DenseMap works with StringRef keys.
549584TEST (DenseMapCustomTest, StringRefTest) {
550585 DenseMap<StringRef, int > M;
0 commit comments