@@ -341,7 +341,7 @@ TEST_F(variant_Test, MoveCTorWithValueLeadsToSameValue)
341341 EXPECT_THAT (*ignatz.get <int >(), Eq (123 ));
342342 // NOLINTJUSTIFICATION check if move is invalidating the object
343343 // NOLINTNEXTLINE(bugprone-use-after-move,hicpp-invalid-access-moved,clang-analyzer-cplusplus.Move)
344- EXPECT_THAT (schlomo.index (), Eq (0U ));
344+ EXPECT_THAT (schlomo.index (), Eq (iox::INVALID_VARIANT_INDEX ));
345345}
346346
347347TEST_F (variant_Test, MoveCTorWithoutValueResultsInInvalidVariant)
@@ -352,6 +352,48 @@ TEST_F(variant_Test, MoveCTorWithoutValueResultsInInvalidVariant)
352352 ASSERT_THAT (ignatz.index (), Eq (iox::INVALID_VARIANT_INDEX));
353353}
354354
355+ TEST_F (variant_Test, MoveCTorWithVariantLeadToSameValue)
356+ {
357+ ::testing::Test::RecordProperty (" TEST_ID" , " dc2a2aff-1fcd-4679-9bfc-b2fb4d2ae928" );
358+ iox::variant<int , float , ComplexClass> schlomo;
359+ schlomo = ComplexClass (2 , 3 .14F );
360+ iox::variant<int , float , ComplexClass> ignatz (std::move (schlomo));
361+ // NOLINTJUSTIFICATION check if move is invalidating the object
362+ // NOLINTNEXTLINE(bugprone-use-after-move,hicpp-invalid-access-moved,clang-analyzer-cplusplus.Move)
363+ ASSERT_THAT (schlomo.index (), Eq (iox::INVALID_VARIANT_INDEX));
364+ EXPECT_THAT (ignatz.get <ComplexClass>()->a , Eq (2 ));
365+ EXPECT_THAT (ignatz.get <ComplexClass>()->b , Eq (3 .14F ));
366+ }
367+
368+ TEST_F (variant_Test, MoveAssignmentWithDifferentTypeVariantLeadsToSameValue)
369+ {
370+ ::testing::Test::RecordProperty (" TEST_ID" , " 562a38c3-aac2-4b1f-be55-c2d1b49e6c53" );
371+ iox::variant<int , float , ComplexClass> schlomo;
372+ schlomo = ComplexClass (2 , 3 .14F );
373+ iox::variant<int , float , ComplexClass> ignatz (2 .14F );
374+ ignatz = std::move (schlomo);
375+ // NOLINTJUSTIFICATION check if move is invalidating the object
376+ // NOLINTNEXTLINE(bugprone-use-after-move,hicpp-invalid-access-moved,clang-analyzer-cplusplus.Move)
377+ ASSERT_THAT (schlomo.index (), Eq (iox::INVALID_VARIANT_INDEX));
378+ EXPECT_THAT (ignatz.get <ComplexClass>()->a , Eq (2 ));
379+ EXPECT_THAT (ignatz.get <ComplexClass>()->b , Eq (3 .14F ));
380+ }
381+
382+ TEST_F (variant_Test, MoveAssignmentWithSameTypeVariantLeadsToSameValue)
383+ {
384+ ::testing::Test::RecordProperty (" TEST_ID" , " e4a530af-05c0-49e5-ae04-f3512f299fbe" );
385+ iox::variant<int , float , ComplexClass> schlomo;
386+ schlomo = ComplexClass (2 , 3 .14F );
387+ iox::variant<int , float , ComplexClass> ignatz;
388+ ignatz = ComplexClass (3 , 4 .14F );
389+ ignatz = std::move (schlomo);
390+ // NOLINTJUSTIFICATION check if move is invalidating the object
391+ // NOLINTNEXTLINE(bugprone-use-after-move,hicpp-invalid-access-moved,clang-analyzer-cplusplus.Move)
392+ ASSERT_THAT (schlomo.index (), Eq (iox::INVALID_VARIANT_INDEX));
393+ EXPECT_THAT (ignatz.get <ComplexClass>()->a , Eq (2 ));
394+ EXPECT_THAT (ignatz.get <ComplexClass>()->b , Eq (3 .14F ));
395+ }
396+
355397TEST_F (variant_Test, MoveAssignmentWithValueLeadsToSameValue)
356398{
357399 ::testing::Test::RecordProperty (" TEST_ID" , " ee36df28-545f-42bc-9ef6-3699284f1a42" );
@@ -429,12 +471,12 @@ TEST_F(variant_Test, CreatingSecondObjectViaMoveCTorResultsInTwoDTorCalls)
429471 EXPECT_THAT (DTorTest::dtorWasCalled, Eq (false ));
430472 // NOLINTJUSTIFICATION check if move is invalidating the object
431473 // NOLINTNEXTLINE(bugprone-use-after-move,hicpp-invalid-access-moved,clang-analyzer-cplusplus.Move)
432- EXPECT_THAT (ignatz.index (), Eq (1U ));
474+ EXPECT_THAT (ignatz.index (), Eq (iox::INVALID_VARIANT_INDEX ));
433475 }
434476 EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
435477 DTorTest::dtorWasCalled = false ;
436478 }
437- EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
479+ EXPECT_THAT (DTorTest::dtorWasCalled, Eq (false ));
438480}
439481
440482TEST_F (variant_Test, CreatingSecondObjectViaMoveAssignmentResultsInTwoDTorCalls)
@@ -450,13 +492,14 @@ TEST_F(variant_Test, CreatingSecondObjectViaMoveAssignmentResultsInTwoDTorCalls)
450492 schlomo = std::move (ignatz);
451493 // NOLINTJUSTIFICATION check if move is invalidating the object
452494 // NOLINTNEXTLINE(bugprone-use-after-move,hicpp-invalid-access-moved,clang-analyzer-cplusplus.Move)
453- EXPECT_THAT (ignatz.index (), Eq (1U ));
454- EXPECT_THAT ( DTorTest::dtorWasCalled, Eq ( false )) ;
495+ EXPECT_THAT (ignatz.index (), Eq (iox::INVALID_VARIANT_INDEX ));
496+ DTorTest::dtorWasCalled = false ;
455497 }
498+ // schlomo is destroyed when it goes out of scope
456499 EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
457500 DTorTest::dtorWasCalled = false ;
458501 }
459- EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
502+ EXPECT_THAT (DTorTest::dtorWasCalled, Eq (false ));
460503}
461504
462505TEST_F (variant_Test, DirectValueAssignmentResultsInCorrectIndex)
0 commit comments