@@ -341,7 +341,7 @@ TEST_F(variant_Test, MoveCTorWithValueLeadsToSameValue)
341
341
EXPECT_THAT (*ignatz.get <int >(), Eq (123 ));
342
342
// NOLINTJUSTIFICATION check if move is invalidating the object
343
343
// 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 ));
345
345
}
346
346
347
347
TEST_F (variant_Test, MoveCTorWithoutValueResultsInInvalidVariant)
@@ -352,6 +352,48 @@ TEST_F(variant_Test, MoveCTorWithoutValueResultsInInvalidVariant)
352
352
ASSERT_THAT (ignatz.index (), Eq (iox::INVALID_VARIANT_INDEX));
353
353
}
354
354
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
+
355
397
TEST_F (variant_Test, MoveAssignmentWithValueLeadsToSameValue)
356
398
{
357
399
::testing::Test::RecordProperty (" TEST_ID" , " ee36df28-545f-42bc-9ef6-3699284f1a42" );
@@ -429,12 +471,12 @@ TEST_F(variant_Test, CreatingSecondObjectViaMoveCTorResultsInTwoDTorCalls)
429
471
EXPECT_THAT (DTorTest::dtorWasCalled, Eq (false ));
430
472
// NOLINTJUSTIFICATION check if move is invalidating the object
431
473
// 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 ));
433
475
}
434
476
EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
435
477
DTorTest::dtorWasCalled = false ;
436
478
}
437
- EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
479
+ EXPECT_THAT (DTorTest::dtorWasCalled, Eq (false ));
438
480
}
439
481
440
482
TEST_F (variant_Test, CreatingSecondObjectViaMoveAssignmentResultsInTwoDTorCalls)
@@ -450,13 +492,14 @@ TEST_F(variant_Test, CreatingSecondObjectViaMoveAssignmentResultsInTwoDTorCalls)
450
492
schlomo = std::move (ignatz);
451
493
// NOLINTJUSTIFICATION check if move is invalidating the object
452
494
// 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 ;
455
497
}
498
+ // schlomo is destroyed when it goes out of scope
456
499
EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
457
500
DTorTest::dtorWasCalled = false ;
458
501
}
459
- EXPECT_THAT (DTorTest::dtorWasCalled, Eq (true ));
502
+ EXPECT_THAT (DTorTest::dtorWasCalled, Eq (false ));
460
503
}
461
504
462
505
TEST_F (variant_Test, DirectValueAssignmentResultsInCorrectIndex)
0 commit comments