@@ -475,6 +475,42 @@ TEST(DenseMapCustomTest, ReserveTest) {
475
475
}
476
476
}
477
477
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
+
478
514
// Make sure DenseMap works with StringRef keys.
479
515
TEST (DenseMapCustomTest, StringRefTest) {
480
516
DenseMap<StringRef, int > M;
0 commit comments