| 377 | } |
| 378 | |
| 379 | template <class T> void testMove() |
| 380 | { |
| 381 | auto poSRS = new OGRSpatialReference(); |
| 382 | { |
| 383 | auto poOrigin = std::unique_ptr<T>(make<T>()); |
| 384 | ASSERT_TRUE(nullptr != poOrigin); |
| 385 | poOrigin->assignSpatialReference(poSRS); |
| 386 | |
| 387 | T valueCopy(*poOrigin); |
| 388 | const int refCountBefore = poSRS->GetReferenceCount(); |
| 389 | T fromMoved(std::move(*poOrigin)); |
| 390 | EXPECT_EQ(poSRS->GetReferenceCount(), refCountBefore); |
| 391 | |
| 392 | ASSERT_TRUE(CPL_TO_BOOL(fromMoved.Equals(&valueCopy))) |
| 393 | << valueCopy.getGeometryName() |
| 394 | << ": move constructor changed a value"; |
| 395 | EXPECT_EQ(fromMoved.getSpatialReference(), poSRS); |
| 396 | |
| 397 | T valueCopy2(valueCopy); |
| 398 | EXPECT_EQ(valueCopy.getSpatialReference(), poSRS); |
| 399 | T value3; |
| 400 | const int refCountBefore2 = poSRS->GetReferenceCount(); |
| 401 | value3 = std::move(valueCopy); |
| 402 | EXPECT_EQ(poSRS->GetReferenceCount(), refCountBefore2); |
| 403 | |
| 404 | ASSERT_TRUE(CPL_TO_BOOL(value3.Equals(&valueCopy2))) |
| 405 | << valueCopy2.getGeometryName() |
| 406 | << ": move assignment operator changed a value"; |
| 407 | EXPECT_EQ(value3.getSpatialReference(), poSRS); |
| 408 | } |
| 409 | EXPECT_EQ(poSRS->GetReferenceCount(), 1); |
| 410 | poSRS->Release(); |
| 411 | } |
| 412 | |
| 413 | TEST_F(test_ogr, geometry_move) |
| 414 | { |
nothing calls this directly
no test coverage detected