@@ -475,6 +475,42 @@ TEST(DenseMapCustomTest, ReserveTest) {
475475 }
476476}
477477
478+ TEST (DenseMapCustomTest, InsertOrAssignTest) {
479+ DenseMap<int , CountCopyAndMove> Map;
480+
481+ CountCopyAndMove val1 (1 );
482+ CountCopyAndMove::ResetCounts ();
483+ auto try0 = Map.insert_or_assign (0 , val1);
484+ EXPECT_TRUE (try0.second );
485+ EXPECT_EQ (0 , CountCopyAndMove::TotalMoves ());
486+ EXPECT_EQ (1 , CountCopyAndMove::CopyConstructions);
487+ EXPECT_EQ (0 , CountCopyAndMove::CopyAssignments);
488+
489+ CountCopyAndMove::ResetCounts ();
490+ auto try1 = Map.insert_or_assign (0 , val1);
491+ EXPECT_FALSE (try1.second );
492+ EXPECT_EQ (0 , CountCopyAndMove::TotalMoves ());
493+ EXPECT_EQ (0 , CountCopyAndMove::CopyConstructions);
494+ EXPECT_EQ (1 , CountCopyAndMove::CopyAssignments);
495+
496+ int key2 = 2 ;
497+ CountCopyAndMove val2 (2 );
498+ CountCopyAndMove::ResetCounts ();
499+ auto try2 = Map.insert_or_assign (key2, std::move (val2));
500+ EXPECT_TRUE (try2.second );
501+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
502+ EXPECT_EQ (1 , CountCopyAndMove::MoveConstructions);
503+ EXPECT_EQ (0 , CountCopyAndMove::MoveAssignments);
504+
505+ CountCopyAndMove val3 (3 );
506+ CountCopyAndMove::ResetCounts ();
507+ auto try3 = Map.insert_or_assign (key2, std::move (val3));
508+ EXPECT_FALSE (try3.second );
509+ EXPECT_EQ (0 , CountCopyAndMove::TotalCopies ());
510+ EXPECT_EQ (0 , CountCopyAndMove::MoveConstructions);
511+ EXPECT_EQ (1 , CountCopyAndMove::MoveAssignments);
512+ }
513+
478514// Make sure DenseMap works with StringRef keys.
479515TEST (DenseMapCustomTest, StringRefTest) {
480516 DenseMap<StringRef, int > M;
0 commit comments