aboutsummaryrefslogtreecommitdiff
path: root/test/unit/proj_angular_io_test.cpp
diff options
context:
space:
mode:
authorKristian Evers <kristianevers@gmail.com>2019-01-03 22:12:22 +0100
committerKristian Evers <kristianevers@gmail.com>2019-01-04 14:02:06 +0100
commitedb068401822c0cb7047019ae7a1dac587778ce3 (patch)
tree00897a41abd674fa841492cdf4fda86d4778d399 /test/unit/proj_angular_io_test.cpp
parent78d4126eb54d3f066d7225c160707fc68ae31229 (diff)
downloadPROJ-edb068401822c0cb7047019ae7a1dac587778ce3.tar.gz
PROJ-edb068401822c0cb7047019ae7a1dac587778ce3.zip
Replace PJ_IO_UNITS_WHATEVER with units from neighbour steps
With this commit we make sure that proj_angular_input() and proj_angular_output return the correct result for any given pipeline.
Diffstat (limited to 'test/unit/proj_angular_io_test.cpp')
-rw-r--r--test/unit/proj_angular_io_test.cpp101
1 files changed, 101 insertions, 0 deletions
diff --git a/test/unit/proj_angular_io_test.cpp b/test/unit/proj_angular_io_test.cpp
new file mode 100644
index 00000000..fdb44704
--- /dev/null
+++ b/test/unit/proj_angular_io_test.cpp
@@ -0,0 +1,101 @@
+/******************************************************************************
+ *
+ * Project: PROJ
+ * Purpose: Test that in- and output units behave correctly, especially
+ * angular units that need special treatment.
+ * Author: Kristian Evers <kristianevers@gmail.com>
+ *
+ ******************************************************************************
+ * Copyright (c) 2019, Kristian Evers
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ ****************************************************************************/
+
+#include "proj.h"
+
+#include "gtest_include.h"
+
+namespace {
+
+TEST(AngularUnits, Basic) {
+ auto ctx = proj_context_create();
+ auto P = proj_create(ctx, "proj=latlong");
+
+ EXPECT_TRUE(proj_angular_input(P, PJ_FWD));
+ EXPECT_TRUE(proj_angular_output(P, PJ_FWD));
+ EXPECT_TRUE(proj_angular_input(P, PJ_INV));
+ EXPECT_TRUE(proj_angular_output(P, PJ_INV));
+
+ proj_destroy(P);
+ proj_context_destroy(ctx);
+}
+
+TEST(AngularUnits, Pipelines) {
+ auto ctx = proj_context_create();
+ auto P = proj_create(ctx, "proj=pipeline +step +proj=axisswap +order=2,1 +step +proj=latlong +step +proj=axisswap +order=2,1");
+
+ EXPECT_TRUE(proj_angular_input(P, PJ_FWD));
+ EXPECT_TRUE(proj_angular_output(P, PJ_FWD));
+ EXPECT_TRUE(proj_angular_input(P, PJ_INV));
+ EXPECT_TRUE(proj_angular_output(P, PJ_INV));
+
+ proj_destroy(P);
+ proj_context_destroy(ctx);
+
+}
+
+TEST(AngularUnits, Pipelines2) {
+ auto ctx = proj_context_create();
+ auto P = proj_create(
+ ctx,
+ "+proj=pipeline "
+ "+step +proj=axisswap +order=2,1 "
+ "+step +proj=unitconvert +xy_in=deg +xy_out=rad "
+ "+step +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 "
+ "+step +proj=axisswap +order=2,1 "
+ "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=us-ft +z_out=us-ft");
+
+ EXPECT_FALSE(proj_angular_input(P, PJ_FWD));
+ EXPECT_FALSE(proj_angular_output(P, PJ_FWD));
+
+ proj_destroy(P);
+ proj_context_destroy(ctx);
+
+}
+
+TEST(AngularUnits, Pipelines3) {
+ auto ctx = proj_context_create();
+ auto P = proj_create(
+ ctx,
+ "+proj=pipeline "
+ "+step +proj=axisswap +order=2,1 "
+ "+step +proj=tmerc +lat_0=0 +lon_0=-81 +k=0.9996 +x_0=500000.001016002 +y_0=0 +ellps=WGS84 "
+ "+step +proj=axisswap +order=2,1 "
+ "+step +proj=unitconvert +xy_in=m +z_in=m +xy_out=us-ft +z_out=us-ft");
+
+ EXPECT_TRUE(proj_angular_input(P, PJ_FWD));
+ EXPECT_FALSE(proj_angular_output(P, PJ_FWD));
+
+ proj_destroy(P);
+ proj_context_destroy(ctx);
+
+}
+
+
+} // namespace