diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2021-03-17 16:30:13 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-17 16:30:13 +0100 |
| commit | ee19a2d4d3241f2d44968a67bf4a6e425e38d84a (patch) | |
| tree | fd3d555479ea516a10d04c5bd5ea772b2496511f /test/unit/test_c_api.cpp | |
| parent | 1b07ef00c55525420cfbc9467016959e709e6862 (diff) | |
| parent | cbbf3d60407ba4e9ed4c8586b4cce9c421e08f16 (diff) | |
| download | PROJ-ee19a2d4d3241f2d44968a67bf4a6e425e38d84a.tar.gz PROJ-ee19a2d4d3241f2d44968a67bf4a6e425e38d84a.zip | |
Merge pull request #2582 from rouault/fix_proj_clone
Fix proj_clone() to work on 'meta' coordinate operation PJ* objects that can be returned by proj_create_crs_to_crs()
Diffstat (limited to 'test/unit/test_c_api.cpp')
| -rw-r--r-- | test/unit/test_c_api.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/test/unit/test_c_api.cpp b/test/unit/test_c_api.cpp index 1b08e884..20fb0583 100644 --- a/test/unit/test_c_api.cpp +++ b/test/unit/test_c_api.cpp @@ -127,6 +127,10 @@ class CApi : public ::testing::Test { PJ *m_obj = nullptr; explicit ObjectKeeper(PJ *obj) : m_obj(obj) {} ~ObjectKeeper() { proj_destroy(m_obj); } + void clear() { + proj_destroy(m_obj); + m_obj = nullptr; + } ObjectKeeper(const ObjectKeeper &) = delete; ObjectKeeper &operator=(const ObjectKeeper &) = delete; @@ -2738,6 +2742,40 @@ TEST_F(CApi, proj_clone) { // --------------------------------------------------------------------------- +TEST_F(CApi, proj_clone_of_obj_with_alternative_operations) { + // NAD27 to NAD83 + auto obj = + proj_create_crs_to_crs(m_ctxt, "EPSG:4267", "EPSG:4269", nullptr); + ObjectKeeper keeper(obj); + ASSERT_NE(obj, nullptr); + + PJ_COORD c; + c.xyzt.x = 40.5; + c.xyzt.y = -60; + c.xyzt.z = 0; + c.xyzt.t = 2021; + PJ_COORD c_trans_ref = proj_trans(obj, PJ_FWD, c); + EXPECT_NE(c_trans_ref.xyzt.x, c.xyzt.x); + EXPECT_NEAR(c_trans_ref.xyzt.x, c.xyzt.x, 1e-3); + EXPECT_NEAR(c_trans_ref.xyzt.y, c.xyzt.y, 1e-3); + + auto clone = proj_clone(m_ctxt, obj); + ObjectKeeper keeperClone(clone); + ASSERT_NE(clone, nullptr); + + EXPECT_TRUE(proj_is_equivalent_to(obj, clone, PJ_COMP_STRICT)); + + keeper.clear(); + obj = nullptr; + (void)obj; + + PJ_COORD c_trans = proj_trans(clone, PJ_FWD, c); + EXPECT_EQ(c_trans.xyzt.x, c_trans_ref.xyzt.x); + EXPECT_EQ(c_trans.xyzt.y, c_trans_ref.xyzt.y); +} + +// --------------------------------------------------------------------------- + TEST_F(CApi, proj_crs_alter_geodetic_crs) { auto projCRS = proj_create_from_wkt( m_ctxt, |
