[Git][debian-gis-team/proj][experimental] 5 commits: New upstream version 5.0.0~rc5

Bas Couwenberg gitlab at salsa.debian.org
Fri Feb 23 20:06:17 UTC 2018


Bas Couwenberg pushed to branch experimental at Debian GIS Project / proj


Commits:
881ab4ca by Bas Couwenberg at 2018-02-23T20:40:17+01:00
New upstream version 5.0.0~rc5
- - - - -
12df8bf3 by Bas Couwenberg at 2018-02-23T20:40:23+01:00
Merge tag 'upstream/5.0.0_rc5' into experimental

Upstream version 5.0.0~rc5

- - - - -
ce8992c9 by Bas Couwenberg at 2018-02-23T20:40:46+01:00
New upstream release candidate.

- - - - -
21a24cc3 by Bas Couwenberg at 2018-02-23T20:41:14+01:00
Drop install-nad-gtx.patch, applied upstream.

- - - - -
a6df7664 by Bas Couwenberg at 2018-02-23T20:45:17+01:00
Update copyright years for Charles Karney.

- - - - -


25 changed files:

- NEWS
- debian/changelog
- debian/copyright
- − debian/patches/install-nad-gtx.patch
- − debian/patches/series
- man/man1/cct.1
- man/man1/proj.1
- nad/CMakeLists.txt
- nad/Makefile.am
- nad/Makefile.in
- nad/README
- nad/test27
- nad/test83
- src/PJ_calcofi.c
- src/PJ_horner.c
- src/cct.c
- src/geodesic.c
- src/geodesic.h
- src/geodtest.c
- src/gie.c
- src/pj_mlfn.c
- test/CMakeLists.txt
- + test/gie/DHDN_ETRS89.gie
- test/gie/Makefile.am
- test/gie/Makefile.in


Changes:

=====================================
NEWS
=====================================
--- a/NEWS
+++ b/NEWS
@@ -162,7 +162,7 @@ o The PROJ.4 project also distributes the datum-grid package,
 
  o Updated EPSG database to version 9.2.0.
 
- o Geodesic library updated to version 1.49.1-c.
+ o Geodesic library updated to version 1.49.2-c.
 
  o Support for analytical partial derivatives has been removed.
 
@@ -232,9 +232,9 @@ o The PROJ.4 project also distributes the datum-grid package,
  o Equations for meridian convergence and partial derivatives have
    been corrected for non-conformal projections. #526.
 
- o Fixed scaling of cartesian coordiantes in pj_transform(). #726.
+ o Fixed scaling of cartesian coordinates in pj_transform(). #726.
 
- o Additional bug fixes courtesy of Googles OSS-Fuzz program:
+ o Additional bug fixes courtesy of Google's OSS-Fuzz program:
    https://bugs.chromium.org/p/oss-fuzz/issues/list?can=1&q=proj4
 
 


=====================================
debian/changelog
=====================================
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+proj (5.0.0~rc5-1) UNRELEASED; urgency=medium
+
+  * New upstream release candidate.
+  * Drop install-nad-gtx.patch, applied upstream.
+  * Update copyright years for Charles Karney.
+
+ -- Bas Couwenberg <sebastic at debian.org>  Fri, 23 Feb 2018 20:40:32 +0100
+
 proj (5.0.0~rc4-1~exp2) experimental; urgency=medium
 
   * Update datumgrids.shar (XZ compressed) with proj-datumgrid-1.7RC1.


=====================================
debian/copyright
=====================================
--- a/debian/copyright
+++ b/debian/copyright
@@ -34,7 +34,7 @@ Comment: Version 4.3.3 was authored by:
    I did the work.  Essentially all work was done by Gerald Evenden.
 Copyright:             2016-2018, Thomas Knudsen
                        2016-2018, SDFE
-                       2012-2017, Charles Karney <charles at karney.com>
+                       2012-2018, Charles Karney <charles at karney.com>
                        2016-2017, Kristian Evers
                             2017, Lukasz Komsta
                             2016, Karsten Engsager


=====================================
debian/patches/install-nad-gtx.patch deleted
=====================================
--- a/debian/patches/install-nad-gtx.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-Description: Also install .gtx files from proj-datumgrid.
-Author: Bas Couwenberg <sebastic at debian.org>
-Forwarded: https://github.com/OSGeo/proj.4/pull/813
-Applied-Upstream: https://github.com/OSGeo/proj.4/commit/b65e8ef7b29f19c6b4b4a49cf95766ec1f752491
-
---- a/nad/Makefile.am
-+++ b/nad/Makefile.am
-@@ -50,7 +50,7 @@ install-data-local: process-nad2bin
- 	else \
- 	  echo "nad2nad NADCON source files not present"; \
- 	fi
--	@for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy \
-+	@for gridfile in $(NADPATH)/*.gsb $(NADPATH)/*.gtx $(NADPATH)/ntv1_can.dat dummy \
- 	                 $(NADPATH)/alaska $(NADPATH)/conus $(NADPATH)/hawaii $(NADPATH)/null \
- 	                 $(NADPATH)/prvi $(NADPATH)/stgeorge $(NADPATH)/stlrnc $(NADPATH)/stpaul \
- 	                 $(NADPATH)/FL $(NADPATH)/MD $(NADPATH)/TN $(NADPATH)/WI $(NADPATH)/WO; do \
-@@ -63,7 +63,7 @@ install-data-local: process-nad2bin
- check-local: process-nad2bin
- # Check if we are doing an out-of-tree build
- 	@if test ! -f epsg; then \
--	  for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy ; do \
-+	  for gridfile in $(NADPATH)/*.gsb $(NADPATH)/*.gtx $(NADPATH)/ntv1_can.dat dummy ; do \
- 	    if test "$$gridfile" != "dummy" -a -f "$$gridfile" ; then \
- 	      cp $$gridfile .; \
- 	    fi; \
---- a/nad/CMakeLists.txt
-+++ b/nad/CMakeLists.txt
-@@ -23,7 +23,8 @@ set(PROJ_DICTIONARY  epsg
- #
- 
- file(GLOB GSB_FILES  *.gsb)
--set(GRIDSHIFT_FILES ${GSB_FILES})
-+file(GLOB GTX_FILES  *.gtx)
-+set(GRIDSHIFT_FILES ${GSB_FILES} ${GTX_FILES})
- set(GRIDSHIFT_FILES ${GRIDSHIFT_FILES}
-                      )
- option(CONVERT_DATA "convert some ascii file to binary file for use in proj4" OFF)


=====================================
debian/patches/series deleted
=====================================
--- a/debian/patches/series
+++ /dev/null
@@ -1 +0,0 @@
-install-nad-gtx.patch


=====================================
man/man1/cct.1
=====================================
--- a/man/man1/cct.1
+++ b/man/man1/cct.1
@@ -30,7 +30,7 @@ professor of Geodesy at the University of Copenhagen, mentor and advisor
 for a generation of Danish geodesists, colleague and collaborator for
 two generations of global geodesists, Secretary General for the
 International Association of Geodesy, IAG (1995--2007), fellow of the
-Amercan Geophysical Union (1991), recipient of the IAG Levallois Medal
+American Geophysical Union (1991), recipient of the IAG Levallois Medal
 (2007), the European Geosciences Union Vening Meinesz Medal (2008), and
 of numerous other honours.
 .PP
@@ -40,7 +40,7 @@ the development of geodesy - both through his scientific contributions,
 comprising more than 250 publications, and by his mentoring and teaching
 of the next generations of geodesists.
 .PP
-As Christian was an avid Fortran programmer, and a keen Unix connoiseur,
+As Christian was an avid Fortran programmer, and a keen Unix connoisseur,
 he would have enjoyed to know that his initials would be used to name a
 modest Unix style transformation filter, hinting at the tireless aspect
 of his personality, which was certainly one of the reasons he accomplished


=====================================
man/man1/proj.1
=====================================
--- a/man/man1/proj.1
+++ b/man/man1/proj.1
@@ -119,7 +119,7 @@ output from x-y or longitude-latitude to y-x or latitude-longitude.
 .TP
 .BI \-S
 Causes estimation of
-.I meridinal
+.I meridional
 and
 .I parallel
 scale factors,
@@ -131,7 +131,7 @@ and
 and
 .I minimum
 scale factors to be listed between <> for each input point.
-For conformal projections meridinal and parallel scales factors
+For conformal projections meridional and parallel scales factors
 will be equal and angular distortion zero.
 Equal area projections will have an area factor of 1.
 .TP


=====================================
nad/CMakeLists.txt
=====================================
--- a/nad/CMakeLists.txt
+++ b/nad/CMakeLists.txt
@@ -23,7 +23,8 @@ set(PROJ_DICTIONARY  epsg
 #
 
 file(GLOB GSB_FILES  *.gsb)
-set(GRIDSHIFT_FILES ${GSB_FILES})
+file(GLOB GTX_FILES  *.gtx)
+set(GRIDSHIFT_FILES ${GSB_FILES} ${GTX_FILES})
 set(GRIDSHIFT_FILES ${GRIDSHIFT_FILES}
                      )
 option(CONVERT_DATA "convert some ascii file to binary file for use in proj4" OFF)


=====================================
nad/Makefile.am
=====================================
--- a/nad/Makefile.am
+++ b/nad/Makefile.am
@@ -50,7 +50,7 @@ install-data-local: process-nad2bin
 	else \
 	  echo "nad2nad NADCON source files not present"; \
 	fi
-	@for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy \
+	@for gridfile in $(NADPATH)/*.gsb $(NADPATH)/*.gtx $(NADPATH)/ntv1_can.dat dummy \
 	                 $(NADPATH)/alaska $(NADPATH)/conus $(NADPATH)/hawaii $(NADPATH)/null \
 	                 $(NADPATH)/prvi $(NADPATH)/stgeorge $(NADPATH)/stlrnc $(NADPATH)/stpaul \
 	                 $(NADPATH)/FL $(NADPATH)/MD $(NADPATH)/TN $(NADPATH)/WI $(NADPATH)/WO; do \
@@ -63,7 +63,7 @@ install-data-local: process-nad2bin
 check-local: process-nad2bin
 # Check if we are doing an out-of-tree build
 	@if test ! -f epsg; then \
-	  for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy ; do \
+	  for gridfile in $(NADPATH)/*.gsb $(NADPATH)/*.gtx $(NADPATH)/ntv1_can.dat dummy ; do \
 	    if test "$$gridfile" != "dummy" -a -f "$$gridfile" ; then \
 	      cp $$gridfile .; \
 	    fi; \


=====================================
nad/Makefile.in
=====================================
--- a/nad/Makefile.in
+++ b/nad/Makefile.in
@@ -543,7 +543,7 @@ install-data-local: process-nad2bin
 	else \
 	  echo "nad2nad NADCON source files not present"; \
 	fi
-	@for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy \
+	@for gridfile in $(NADPATH)/*.gsb $(NADPATH)/*.gtx $(NADPATH)/ntv1_can.dat dummy \
 	                 $(NADPATH)/alaska $(NADPATH)/conus $(NADPATH)/hawaii $(NADPATH)/null \
 	                 $(NADPATH)/prvi $(NADPATH)/stgeorge $(NADPATH)/stlrnc $(NADPATH)/stpaul \
 	                 $(NADPATH)/FL $(NADPATH)/MD $(NADPATH)/TN $(NADPATH)/WI $(NADPATH)/WO; do \
@@ -556,7 +556,7 @@ install-data-local: process-nad2bin
 check-local: process-nad2bin
 # Check if we are doing an out-of-tree build
 	@if test ! -f epsg; then \
-	  for gridfile in $(NADPATH)/*.gsb $(NADPATH)/ntv1_can.dat dummy ; do \
+	  for gridfile in $(NADPATH)/*.gsb $(NADPATH)/*.gtx $(NADPATH)/ntv1_can.dat dummy ; do \
 	    if test "$$gridfile" != "dummy" -a -f "$$gridfile" ; then \
 	      cp $$gridfile .; \
 	    fi; \


=====================================
nad/README
=====================================
--- a/nad/README
+++ b/nad/README
@@ -67,10 +67,3 @@ TN.lla.Z    --- Tennessee
 WI.lla.Z    --- Wisconsin
 WO.lla.Z    --- Washington, Oregon, N. California
 
-	Other grid shift files
-ntv1_can.dat	--- Canadian NTv1 grid shift file (NAD27-->NAD83)
-ntf_r93.gsb	--- French NTv2 grid shift file (NTF-->RGF93)
-BETA2007.gsb	--- German NTv2 grid shift file (DE_DHDN-->ETRS89) :
-					http://crs.bkg.bund.de/crseu/crs/descrtrans/BeTA/de_dhdn2etrs_beta.php
-					Confirmed with Uwe Schmitz <uwe.schmitz at bezreg-koeln.nrw.de> that free
-					redistribution is allowed and welcome.


=====================================
nad/test27
=====================================
--- a/nad/test27
+++ b/nad/test27
@@ -4,7 +4,7 @@
 #   the second pair of numbers are respective easting and northing output.
 #
 # Proj will vary in the .001ft range with projections using Transverse
-#   Mercator due to greater precision of meridinal distance function.
+#   Mercator due to greater precision of meridional distance function.
 #
 NAD_DIR=`dirname $0`
 EXE=$1


=====================================
nad/test83
=====================================
--- a/nad/test83
+++ b/nad/test83
@@ -5,7 +5,7 @@
 #   the second pair of numbers are respective easting and northing output.
 #
 # Proj will vary in the .001ft range with projections using Transverse
-#   Mercator due to greater precision of meridinal distance function.
+#   Mercator due to greater precision of meridional distance function.
 #
 NAD_DIR=`dirname $0`
 EXE=$1


=====================================
src/PJ_calcofi.c
=====================================
--- a/src/PJ_calcofi.c
+++ b/src/PJ_calcofi.c
@@ -13,7 +13,7 @@ PROJ_HEAD(calcofi,
 
 /* Conversions for the California Cooperative Oceanic Fisheries Investigations
 Line/Station coordinate system following the algorithm of:
-Eber, L.E., and  R.P. Hewitt. 1979. Conversion algorithms for the CALCOFI
+Eber, L.E., and  R.P. Hewitt. 1979. Conversion algorithms for the CalCOFI
 station grid. California Cooperative Oceanic Fisheries Investigations Reports
 20:135-137. (corrected for typographical errors).
 http://www.calcofi.org/publications/calcofireports/v20/Vol_20_Eber___Hewitt.pdf


=====================================
src/PJ_horner.c
=====================================
--- a/src/PJ_horner.c
+++ b/src/PJ_horner.c
@@ -96,6 +96,8 @@ static HORNER *horner_alloc (size_t order, int complex_polynomia);
 static void    horner_free (HORNER *h);
 
 struct horner {
+    int    uneg;     /* u axis negated? */
+    int    vneg;     /* v axis negated? */
     int    order;    /* maximum degree of polynomium */
     int    coefs;    /* number of coefficients for each polynomium  */
     double range;    /* radius of the region of validity */
@@ -340,11 +342,19 @@ polynomial evaluation engine.
         c  =  cb + sz;
         e  =  position.u - transformation->fwd_origin->u;
         n  =  position.v - transformation->fwd_origin->v;
+        if (transformation->uneg)
+            e  =  -e;
+        if (transformation->vneg)
+            n  =  -n;
     } else {                                              /* inverse */
         cb =  transformation->inv_c;
         c  =  cb + sz;
         e  =  position.u - transformation->inv_origin->u;
         n  =  position.v - transformation->inv_origin->v;
+        if (transformation->uneg)
+            e  =  -e;
+        if (transformation->vneg)
+            n  =  -n;
     }
 
     if ((fabs(n) > range) || (fabs(e) > range)) {
@@ -454,6 +464,10 @@ PJ *PROJECTION(horner) {
     P->opaque = (void *) Q;
 
     if (complex_horner) {
+        /* Westings and/or southings? */
+        Q->uneg = pj_param_exists (P->params, "uneg") ? 1 : 0;
+        Q->vneg = pj_param_exists (P->params, "vneg") ? 1 : 0;
+
         n = 2*degree + 2;
         if (0==parse_coefs (P, Q->fwd_c, "fwd_c", n))
             return horner_freeup (P, PJD_ERR_MISSING_ARGS);
@@ -461,8 +475,8 @@ PJ *PROJECTION(horner) {
             return horner_freeup (P, PJD_ERR_MISSING_ARGS);
         P->fwd4d = complex_horner_forward_4d;
         P->inv4d = complex_horner_reverse_4d;
-
     }
+
     else {
         n = horner_number_of_coefficients (degree);
         if (0==parse_coefs (P, Q->fwd_u, "fwd_u", n))


=====================================
src/cct.c
=====================================
--- a/src/cct.c
+++ b/src/cct.c
@@ -24,7 +24,7 @@ professor of Geodesy at the University of Copenhagen, mentor and advisor
 for a generation of Danish geodesists, colleague and collaborator for
 two generations of global geodesists, Secretary General for the
 International Association of Geodesy, IAG (1995--2007), fellow of the
-Amercan Geophysical Union (1991), recipient of the IAG Levallois Medal
+American Geophysical Union (1991), recipient of the IAG Levallois Medal
 (2007), the European Geosciences Union Vening Meinesz Medal (2008), and
 of numerous other honours.
 
@@ -34,7 +34,7 @@ the development of geodesy - both through his scientific contributions,
 comprising more than 250 publications, and by his mentoring and teaching
 of the next generations of geodesists.
 
-As Christian was an avid Fortran programmer, and a keen Unix connoiseur,
+As Christian was an avid Fortran programmer, and a keen Unix connoisseur,
 he would have enjoyed to know that his initials would be used to name a
 modest Unix style transformation filter, hinting at the tireless aspect
 of his personality, which was certainly one of the reasons he accomplished


=====================================
src/geodesic.c
=====================================
--- a/src/geodesic.c
+++ b/src/geodesic.c
@@ -18,7 +18,7 @@
  *
  * See the comments in geodesic.h for documentation.
  *
- * Copyright (c) Charles Karney (2012-2017) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2012-2018) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * https://geographiclib.sourceforge.io/
  */
@@ -89,10 +89,14 @@ static void Init() {
     tolb = tol0 * tol2;
     xthresh = 1000 * tol2;
     degree = pi/180;
+    #if defined(NAN)
+    NaN = NAN;
+    #else
     {
       real minus1 = -1;
       NaN = sqrt(minus1);
     }
+    #endif
     init = 1;
   }
 }
@@ -1809,13 +1813,13 @@ int transitdirect(real lon1, real lon2) {
 #if HAVE_C99_MATH
   lon1 = remainder(lon1, (real)(720));
   lon2 = remainder(lon2, (real)(720));
-  return ( (lon2 >= 0 && lon2 < 360 ? 0 : 1) -
-           (lon1 >= 0 && lon1 < 360 ? 0 : 1) );
+  return ( (lon2 <= 0 && lon2 > -360 ? 1 : 0) -
+           (lon1 <= 0 && lon1 > -360 ? 1 : 0) );
 #else
   lon1 = fmod(lon1, (real)(720));
   lon2 = fmod(lon2, (real)(720));
-  return ( ((lon2 >= 0 && lon2 < 360) || lon2 < -360 ? 0 : 1) -
-           ((lon1 >= 0 && lon1 < 360) || lon1 < -360 ? 0 : 1) );
+  return ( ((lon2 <= 0 && lon2 > -360) || lon2 > 360 ? 1 : 0) -
+           ((lon1 <= 0 && lon1 > -360) || lon1 > 360 ? 1 : 0) );
 #endif
 }
 
@@ -1888,7 +1892,7 @@ void geod_polygon_addpoint(const struct geod_geodesic* g,
 void geod_polygon_addedge(const struct geod_geodesic* g,
                           struct geod_polygon* p,
                           real azi, real s) {
-  if (p->num) {                 /* Do nothing is num is zero */
+  if (p->num) {              /* Do nothing is num is zero */
     real lat, lon, S12 = 0;  /* Initialize S12 to stop Visual Studio warning */
     geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s,
                    &lat, &lon, 0,


=====================================
src/geodesic.h
=====================================
--- a/src/geodesic.h
+++ b/src/geodesic.h
@@ -107,7 +107,7 @@
  * twice about restructuring the internals of the C code since this may make
  * porting fixes from the C++ code more difficult.
  *
- * Copyright (c) Charles Karney (2012-2017) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2012-2018) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * https://geographiclib.sourceforge.io/
  *
@@ -132,7 +132,7 @@
  * The patch level of the geodesic library.  (This tracks the version of
  * GeographicLib.)
  **********************************************************************/
-#define GEODESIC_VERSION_PATCH 1
+#define GEODESIC_VERSION_PATCH 2
 
 /**
  * Pack the version components into a single integer.  Users should not rely on


=====================================
src/geodtest.c
=====================================
--- a/src/geodtest.c
+++ b/src/geodtest.c
@@ -4,7 +4,7 @@
  *
  * Run these tests by configuring with cmake and running "make test".
  *
- * Copyright (c) Charles Karney (2015-2017) <charles at karney.com> and licensed
+ * Copyright (c) Charles Karney (2015-2018) <charles at karney.com> and licensed
  * under the MIT/X11 License.  For more information, see
  * https://geographiclib.sourceforge.io/
  **********************************************************************/
@@ -688,6 +688,48 @@ static int GeodSolve78() {
   return result;
 }
 
+static int GeodSolve80() {
+  /* Some tests to add code coverage: computing scale in special cases + zero
+     length geodesic (includes GeodSolve80 - GeodSolve83) + using an incapable
+     line. */
+  double a12, s12, azi1, azi2, m12, M12, M21, S12;
+  struct geod_geodesic g;
+  struct geod_geodesicline l;
+  int result = 0;
+  geod_init(&g, wgs84_a, wgs84_f);
+  geod_geninverse(&g, 0, 0, 0, 90, 0, 0, 0, 0, &M12, &M21, 0);
+  result += assertEquals(M12, -0.0052842753, 0.5e-10);
+  result += assertEquals(M21, -0.0052842753, 0.5e-10);
+  geod_geninverse(&g, 0, 0, 1e-6, 1e-6, 0, 0, 0, 0, &M12, &M21, 0);
+  result += assertEquals(M12, 1, 0.5e-10);
+  result += assertEquals(M21, 1, 0.5e-10);
+  a12 = geod_geninverse(&g, 20.001, 0, 20.001, 0,
+                        &s12, &azi1, &azi2, &m12, &M12, &M21, &S12);
+  result += a12 == 0 ? 0 : 1;
+  result += s12 == 0 ? 0 : 1;
+  result += azi1 == 180 ? 0 : 1;
+  result += azi2 == 180 ? 0 : 1;
+  result += m12 == 0 ? 0 : 1;
+  result += assertEquals(M12, 1, 1e-15);
+  result += assertEquals(M21, 1, 1e-15);
+  result += S12 == 0 ? 0 : 1;
+  a12 = geod_geninverse(&g, 90, 0, 90, 180,
+                        &s12, &azi1, &azi2, &m12, &M12, &M21, &S12);
+  result += a12 == 0 ? 0 : 1;
+  result += s12 == 0 ? 0 : 1;
+  result += azi1 == 0 ? 0 : 1;
+  result += azi2 == 180 ? 0 : 1;
+  result += m12 == 0 ? 0 : 1;
+  result += assertEquals(M12, 1, 1e-15);
+  result += assertEquals(M21, 1, 1e-15);
+  result += assertEquals(S12, 127516405431022, 0.5);
+  /* An incapable line which can't take distance as input */
+  geod_lineinit(&l, &g, 1, 2, 90, GEOD_LATITUDE);
+  a12 = geod_genposition(&l, 0, 1000, 0, 0, 0, 0, 0, 0, 0, 0);
+  result += a12 != a12 ? 0 : 1;
+  return result;
+}
+
 static int Planimeter0() {
   /* Check fix for pole-encircling bug found 2011-03-16 */
   double pa[4][2] = {{89, 0}, {89, 90}, {89, 180}, {89, 270}};
@@ -787,6 +829,188 @@ static int Planimeter13() {
   return result;
 }
 
+static int Planimeter15() {
+  /* Coverage tests, includes Planimeter15 - Planimeter18 (combinations of
+     reverse and sign) + calls to testpoint, testedge, geod_polygonarea. */
+  struct geod_geodesic g;
+  struct geod_polygon p;
+  double lat[] = {2, 1, 3}, lon[] = {1, 2, 3};
+  double area, s12, azi1;
+  double r = 18454562325.45119,
+    a0 = 510065621724088.5093;  /* ellipsoid area */
+  int result = 0;
+  geod_init(&g, wgs84_a, wgs84_f);
+  geod_polygon_init(&p, 0);
+  geod_polygon_addpoint(&g, &p, lat[0], lon[0]);
+  geod_polygon_addpoint(&g, &p, lat[1], lon[1]);
+  geod_polygon_testpoint(&g, &p, lat[2], lon[2], 0, 1, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  geod_polygon_testpoint(&g, &p, lat[2], lon[2], 0, 0, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  geod_polygon_testpoint(&g, &p, lat[2], lon[2], 1, 1, &area, 0);
+  result += assertEquals(area, -r, 0.5);
+  geod_polygon_testpoint(&g, &p, lat[2], lon[2], 1, 0, &area, 0);
+  result += assertEquals(area, a0-r, 0.5);
+  geod_inverse(&g, lat[1], lon[1], lat[2], lon[2], &s12, &azi1, 0);
+  geod_polygon_testedge(&g, &p, azi1, s12, 0, 1, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  geod_polygon_testedge(&g, &p, azi1, s12, 0, 0, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  geod_polygon_testedge(&g, &p, azi1, s12, 1, 1, &area, 0);
+  result += assertEquals(area, -r, 0.5);
+  geod_polygon_testedge(&g, &p, azi1, s12, 1, 0, &area, 0);
+  result += assertEquals(area, a0-r, 0.5);
+  geod_polygon_addpoint(&g, &p, lat[2], lon[2]);
+  geod_polygon_compute(&g, &p, 0, 1, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  geod_polygon_compute(&g, &p, 0, 0, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  geod_polygon_compute(&g, &p, 1, 1, &area, 0);
+  result += assertEquals(area, -r, 0.5);
+  geod_polygon_compute(&g, &p, 1, 0, &area, 0);
+  result += assertEquals(area, a0-r, 0.5);
+  geod_polygonarea(&g, lat, lon, 3, &area, 0);
+  result += assertEquals(area, r, 0.5);
+  return result;
+}
+
+static int Planimeter19() {
+  /* Coverage tests, includes Planimeter19 - Planimeter20 (degenerate
+     polygons) + extra cases.  */
+  struct geod_geodesic g;
+  struct geod_polygon p;
+  double area, perim;
+  int result = 0;
+  geod_init(&g, wgs84_a, wgs84_f);
+  geod_polygon_init(&p, 0);
+  geod_polygon_compute(&g, &p, 0, 1, &area, &perim);
+  result += area == 0 ? 0 : 1;
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_testpoint(&g, &p, 1, 1, 0, 1, &area, &perim);
+  result += area == 0 ? 0 : 1;
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, &area, &perim);
+  result += area != area ? 0 : 1;
+  result += perim != perim ? 0 : 1;
+  geod_polygon_addpoint(&g, &p, 1, 1);
+  geod_polygon_compute(&g, &p, 0, 1, &area, &perim);
+  result += area == 0 ? 0 : 1;
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_init(&p, 1);
+  geod_polygon_compute(&g, &p, 0, 1, 0, &perim);
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_testpoint(&g, &p, 1, 1, 0, 1, 0, &perim);
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, 0, &perim);
+  result += perim != perim ? 0 : 1;
+  geod_polygon_addpoint(&g, &p, 1, 1);
+  geod_polygon_compute(&g, &p, 0, 1, 0, &perim);
+  result += perim == 0 ? 0 : 1;
+  return result;
+}
+
+static int Planimeter21() {
+  /* Some test to add code coverage: multiple circlings of pole (includes
+     Planimeter21 - Planimeter28) + invocations via testpoint and testedge.
+     Some of the results for i = 4 in the loop are wrong because we don't
+     reduce the area to the allowed range correctly.  However these cases are
+     not "simple" polygons, so we'll defer fixing the problem for now.
+   */
+  struct geod_geodesic g;
+  struct geod_polygon p;
+  double area, lat = 45,
+    a = 39.2144607176828184218, s = 8420705.40957178156285,
+    r = 39433884866571.4277,    /* Area for one circuit */
+    a0 = 510065621724088.5093;  /* Ellipsoid area */
+  int result = 0, i;
+  geod_init(&g, wgs84_a, wgs84_f);
+  geod_polygon_init(&p, 0);
+  geod_polygon_addpoint(&g, &p, lat,  60);
+  geod_polygon_addpoint(&g, &p, lat, 180);
+  geod_polygon_addpoint(&g, &p, lat, -60);
+  geod_polygon_addpoint(&g, &p, lat,  60);
+  geod_polygon_addpoint(&g, &p, lat, 180);
+  geod_polygon_addpoint(&g, &p, lat, -60);
+  for (i = 3; i <= 4; ++i) {
+    geod_polygon_addpoint(&g, &p, lat,  60);
+    geod_polygon_addpoint(&g, &p, lat, 180);
+    geod_polygon_testpoint(&g, &p, lat, -60, 0, 1, &area, 0);
+    if (i != 4) result += assertEquals(area,  i*r, 0.5);
+    geod_polygon_testpoint(&g, &p, lat, -60, 0, 0, &area, 0);
+    if (i != 4) result += assertEquals(area,  i*r, 0.5);
+    geod_polygon_testpoint(&g, &p, lat, -60, 1, 1, &area, 0);
+    if (i != 4) result += assertEquals(area, -i*r, 0.5);
+    geod_polygon_testpoint(&g, &p, lat, -60, 1, 0, &area, 0);
+    result += assertEquals(area, -i*r + a0, 0.5);
+    geod_polygon_testedge(&g, &p, a, s, 0, 1, &area, 0);
+    if (i != 4) result += assertEquals(area,  i*r, 0.5);
+    geod_polygon_testedge(&g, &p, a, s, 0, 0, &area, 0);
+    if (i != 4) result += assertEquals(area,  i*r, 0.5);
+    geod_polygon_testedge(&g, &p, a, s, 1, 1, &area, 0);
+    if (i != 4) result += assertEquals(area, -i*r, 0.5);
+    geod_polygon_testedge(&g, &p, a, s, 1, 0, &area, 0);
+    result += assertEquals(area, -i*r + a0, 0.5);
+    geod_polygon_addpoint(&g, &p, lat, -60);
+    geod_polygon_compute(&g, &p, 0, 1, &area, 0);
+    if (i != 4) result += assertEquals(area,  i*r, 0.5);
+    geod_polygon_compute(&g, &p, 0, 0, &area, 0);
+    if (i != 4) result += assertEquals(area,  i*r, 0.5);
+    geod_polygon_compute(&g, &p, 1, 1, &area, 0);
+    if (i != 4) result += assertEquals(area, -i*r, 0.5);
+    geod_polygon_compute(&g, &p, 1, 0, &area, 0);
+    result += assertEquals(area, -i*r + a0, 0.5);
+  }
+  return result;
+}
+
+static int AddEdge1() {
+  /* Check fix to transitdirect vs transit zero handling inconsistency */
+  struct geod_geodesic g;
+  struct geod_polygon p;
+  double area;
+  int result = 0;
+  geod_init(&g, wgs84_a, wgs84_f);
+  geod_polygon_init(&p, 0);
+  geod_polygon_addpoint(&g, &p, 0, 0);
+  geod_polygon_addedge(&g, &p,  90, 1000);
+  geod_polygon_addedge(&g, &p,   0, 1000);
+  geod_polygon_addedge(&g, &p, -90, 1000);
+  geod_polygon_compute(&g, &p, 0, 1, &area, 0);
+  result += assertEquals(area, 1000000.0, 0.01);
+  return result;
+}
+
+static int EmptyPoly() {
+  struct geod_geodesic g;
+  struct geod_polygon p;
+  double perim, area;
+  int result = 0;
+  geod_init(&g, wgs84_a, wgs84_f);
+  geod_polygon_init(&p, 0);
+  geod_polygon_testpoint(&g, &p, 1, 1, 0, 1, &area, &perim);
+  result += area == 0 ? 0 : 1;
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, &area, &perim);
+  result += area != area ? 0 : 1;
+  result += perim != perim ? 0 : 1;
+  geod_polygon_compute(&g, &p, 0, 1, &area, &perim);
+  result += area == 0 ? 0 : 1;
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_init(&p, 1);
+  geod_polygon_testpoint(&g, &p, 1, 1, 0, 1, 0, &perim);
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, 0, &perim);
+  result += perim != perim ? 0 : 1;
+  geod_polygon_compute(&g, &p, 0, 1, 0, &perim);
+  result += perim == 0 ? 0 : 1;
+  geod_polygon_addpoint(&g, &p, 1, 1);
+  geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, 0, &perim);
+  result += assertEquals(perim, 1000, 1e-10);
+  geod_polygon_testpoint(&g, &p, 2, 2, 0, 1, 0, &perim);
+  result += assertEquals(perim, 156876.149, 0.5e-3);
+  return result;
+}
+
 int main() {
   int n = 0, i;
   if ((i = testinverse())) {++n; printf("testinverse fail: %d\n", i);}
@@ -818,11 +1042,17 @@ int main() {
   if ((i = GeodSolve74())) {++n; printf("GeodSolve74 fail: %d\n", i);}
   if ((i = GeodSolve76())) {++n; printf("GeodSolve76 fail: %d\n", i);}
   if ((i = GeodSolve78())) {++n; printf("GeodSolve78 fail: %d\n", i);}
+  if ((i = GeodSolve80())) {++n; printf("GeodSolve80 fail: %d\n", i);}
   if ((i = Planimeter0())) {++n; printf("Planimeter0 fail: %d\n", i);}
   if ((i = Planimeter5())) {++n; printf("Planimeter5 fail: %d\n", i);}
   if ((i = Planimeter6())) {++n; printf("Planimeter6 fail: %d\n", i);}
   if ((i = Planimeter12())) {++n; printf("Planimeter12 fail: %d\n", i);}
   if ((i = Planimeter13())) {++n; printf("Planimeter13 fail: %d\n", i);}
+  if ((i = Planimeter15())) {++n; printf("Planimeter15 fail: %d\n", i);}
+  if ((i = Planimeter19())) {++n; printf("Planimeter19 fail: %d\n", i);}
+  if ((i = Planimeter21())) {++n; printf("Planimeter21 fail: %d\n", i);}
+  if ((i = AddEdge1())) {++n; printf("AddEdge1 fail: %d\n", i);}
+  if ((i = EmptyPoly())) {++n; printf("EmptyPoly fail: %d\n", i);}
   return n;
 }
 


=====================================
src/gie.c
=====================================
--- a/src/gie.c
+++ b/src/gie.c
@@ -146,7 +146,7 @@ static ffio *ffio_create (const char **tags, size_t n_tags, size_t max_record_si
 
 static const char *gie_tags[] = {
     "<gie>", "operation", "accept", "expect", "roundtrip", "banner", "verbose",
-    "direction", "tolerance", "ignore", "builtins", "echo", "</gie>"
+    "direction", "tolerance", "ignore", "builtins", "echo", "skip", "</gie>"
 };
 
 static const size_t n_gie_tags = sizeof gie_tags / sizeof gie_tags[0];
@@ -177,6 +177,7 @@ typedef struct {
     PJ_COORD a, b, c, e;
     PJ_DIRECTION dir;
     int verbosity;
+    int skip;
     int op_id;
     int op_ok,    op_ko,    op_skip;
     int total_ok, total_ko, total_skip;
@@ -192,6 +193,8 @@ typedef struct {
 ffio *F = 0;
 
 static gie_ctx T;
+int tests=0, succs=0, succ_fails=0, fail_fails=0, succ_rtps=0, fail_rtps=0;
+int succ_builtins=0, fail_builtins=0;
 
 
 static const char delim[] = {"-------------------------------------------------------------------------------\n"};
@@ -299,6 +302,13 @@ int main (int argc, char **argv) {
         fprintf (T.fout, "%sGrand total: %d. Success: %d, Skipped: %d, Failure: %d\n",
                  delim, T.grand_ok+T.grand_ko+T.grand_skip, T.grand_ok, T.grand_skip, T.grand_ko);
         fprintf (T.fout, "%s", delim);
+        if (T.verbosity > 1) {
+            fprintf (T.fout, "Failing roundtrips: %4d,    Succeeding roundtrips: %4d\n", fail_rtps, succ_rtps);
+            fprintf (T.fout, "Failing failures:   %4d,    Succeeding failures:   %4d\n", fail_fails, succ_fails);
+            fprintf (T.fout, "Failing builtins:   %4d,    Succeeding builtins:   %4d\n", fail_builtins, succ_builtins);
+            fprintf (T.fout, "Internal counters:                            %4.4d(%4.4d)\n", tests, succs);
+            fprintf (T.fout, "%s", delim);
+        }
     }
     else
         if (T.grand_ko)
@@ -315,21 +325,54 @@ int main (int argc, char **argv) {
 static int another_failure (void) {
     T.op_ko++;
     T.total_ko++;
+    proj_errno_reset (T.P);
     return 0;
 }
 
 static int another_skip (void) {
     T.op_skip++;
     T.total_skip++;
+    proj_errno_reset (T.P);
     return 0;
 }
 
 static int another_success (void) {
     T.op_ok++;
     T.total_ok++;
+    proj_errno_reset (T.P);
     return 0;
 }
 
+static int another_succeeding_failure (void) {
+    succ_fails++;
+    return another_success ();
+}
+
+static int another_failing_failure (void) {
+    fail_fails++;
+    return another_failure ();
+}
+
+static int another_succeeding_roundtrip (void) {
+    succ_rtps++;
+    return another_success ();
+}
+
+static int another_failing_roundtrip (void) {
+    fail_rtps++;
+    return another_failure ();
+}
+
+static int another_succeeding_builtin (void) {
+    succ_builtins++;
+    return another_success ();
+}
+
+static int another_failing_builtin (void) {
+    fail_builtins++;
+    return another_failure ();
+}
+
 
 static int process_file (const char *fname) {
     FILE *f;
@@ -339,6 +382,9 @@ static int process_file (const char *fname) {
     T.op_ko = T.total_ko = 0;
     T.op_skip = T.total_skip = 0;
 
+    if (T.skip)
+        return proj_destroy (T.P), T.P = 0, 0;
+
     f = fopen (fname, "rt");
     if (0==f) {
         if (T.verbosity > 0) {
@@ -556,27 +602,27 @@ using the "builtins" command verb.
     i = pj_unitconvert_selftest ();
     if (i!=0) {
         fprintf (T.fout, "pj_unitconvert_selftest fails with %d\n", i);
-        another_failure();
+        another_failing_builtin();
     }
     else
-        another_success ();
+        another_succeeding_builtin ();
 
 
     i = pj_cart_selftest ();
     if (i!=0) {
         fprintf (T.fout, "pj_cart_selftest fails with %d\n", i);
-        another_failure();
+        another_failing_builtin();
     }
     else
-        another_success ();
+        another_succeeding_builtin ();
 
     i = pj_horner_selftest ();
     if (i!=0) {
         fprintf (T.fout, "pj_horner_selftest fails with %d\n", i);
-        another_failure();
+        another_failing_builtin();
     }
     else
-        another_success ();
+        another_succeeding_builtin ();
 
     return 0;
 }
@@ -674,7 +720,7 @@ back/forward transformation pairs.
 
     r = proj_roundtrip (T.P, T.dir, ntrips, &coo);
     if (r <= d)
-        return another_success ();
+        return another_succeeding_roundtrip ();
 
     if (T.verbosity > -1) {
         if (0==T.op_ko && T.verbosity < 2)
@@ -683,7 +729,7 @@ back/forward transformation pairs.
         fprintf (T.fout, "     FAILURE in %s(%d):\n", opt_strip_path (T.curr_file), (int) F->lineno);
         fprintf (T.fout, "     roundtrip deviation: %.6f mm, expected: %.6f mm\n", 1000*r, 1000*d);
     }
-    return another_failure ();
+    return another_failing_roundtrip ();
 }
 
 
@@ -723,7 +769,7 @@ static int expect_message_cannot_parse (const char *args) {
 }
 
 static int expect_failure_with_errno_message (int expected, int got) {
-    another_failure ();
+    another_failing_failure ();
 
     if (T.verbosity < 0)
         return 1;
@@ -779,14 +825,16 @@ Tell GIE what to expect, when transforming the ACCEPTed input
             if (expect_failure_with_errno && proj_errno (T.P)!=expect_failure_with_errno)
                 return expect_failure_with_errno_message (expect_failure_with_errno, proj_errno(T.P));
 
-            return another_success ();
+            return another_succeeding_failure ();
         }
 
         /* Otherwise, it's a true failure */
         banner (T.operation);
-        errmsg(3, "%sInvalid operation definition in line no. %d: %s\n",
-            delim, (int) T.operation_lineno, pj_strerrno(proj_errno(T.P)));
-        return another_failure ();
+        errmsg (3, "%sInvalid operation definition in line no. %d:\n       %s (errno=%s/%d)\n",
+            delim, (int) T.operation_lineno, pj_strerrno(proj_errno(T.P)),
+            err_const_from_errno (proj_errno(T.P)), proj_errno(T.P)
+        );
+        return another_failing_failure ();
     }
 
     /* We may still successfully fail even if the proj_create succeeded */
@@ -797,20 +845,24 @@ Tell GIE what to expect, when transforming the ACCEPTed input
         ci = proj_angular_input (T.P, T.dir)? torad_coord (T.P, T.dir, T.a): T.a;
         co = expect_trans_n_dim (ci);
 
-        /* Failed to fail? - that's a failure */
-        if (co.xyz.x!=HUGE_VAL)
-            return another_failure ();
-
         if (expect_failure_with_errno) {
-            printf ("errno=%d, expected=%d\n", proj_errno (T.P), expect_failure_with_errno);
             if (proj_errno (T.P)==expect_failure_with_errno)
-                return another_success ();
-
-            return another_failure ();
+                return another_succeeding_failure ();
+            printf ("errno=%d, expected=%d\n", proj_errno (T.P), expect_failure_with_errno);
+            return another_failing_failure ();
         }
 
-        /* Yes, we failed successfully */
-        return another_success ();
+
+        /* Succeeded in failing? - that's a success */
+        if (co.xyz.x==HUGE_VAL)
+            return another_succeeding_failure ();
+
+        /* Failed to fail? - that's a failure */
+        banner (T.operation);
+        errmsg (3, "%sFailed to fail. Operation definition in line no. %d\n",
+            delim, (int) T.operation_lineno
+        );
+        return another_failing_failure ();
     }
 
 
@@ -822,10 +874,12 @@ Tell GIE what to expect, when transforming the ACCEPTed input
         printf ("left: %d   right:  %d\n", T.P->left, T.P->right);
     }
 
+    tests++;
     T.e  =  parse_coord (args);
     if (HUGE_VAL==T.e.v[0])
         return expect_message_cannot_parse (args);
 
+
     /* expected angular values, probably in degrees */
     ce = proj_angular_output (T.P, T.dir)? torad_coord (T.P, T.dir, T.e): T.e;
     if (T.verbosity > 3)
@@ -836,8 +890,14 @@ Tell GIE what to expect, when transforming the ACCEPTed input
     if (T.verbosity > 3)
         printf ("ACCEPTS  %.12f  %.12f  %.12f  %.12f\n", ci.v[0],ci.v[1],ci.v[2],ci.v[3]);
 
-    /* angular output from proj_trans comes in radians */
+    /* do the transformation, but mask off dimensions not given in expect-ation */
     co = expect_trans_n_dim (ci);
+    if (T.dimensions_given < 4)
+        co.v[3] = 0;
+    if (T.dimensions_given < 3)
+        co.v[2] = 0;
+
+    /* angular output from proj_trans comes in radians */
     T.b = proj_angular_output (T.P, T.dir)? todeg_coord (T.P, T.dir, co): co;
     if (T.verbosity > 3)
         printf ("GOT      %.12f  %.12f  %.12f  %.12f\n", co.v[0],co.v[1],co.v[2],co.v[3]);
@@ -856,6 +916,7 @@ Tell GIE what to expect, when transforming the ACCEPTed input
 
     if (d > T.tolerance)
         return expect_message (d, args);
+    succs++;
 
     another_success ();
     return 0;
@@ -893,7 +954,20 @@ fprintf (T.fout, "%s\n", args);
 
 
 
+/*****************************************************************************/
+static int skip (const char *args) {
+/*****************************************************************************
+Indicate that the remaining material should be skipped. Mostly for debugging.
+******************************************************************************/
+    T.skip = 1;
+    (void) args;
+    return 0;
+}
+
+
 static int dispatch (const char *cmnd, const char *args) {
+    if (T.skip)
+        return SKIP;
     if  (0==strcmp (cmnd, "operation")) return  operation ((char *) args);
     if  (0==strcmp (cmnd, "accept"))    return  accept    (args);
     if  (0==strcmp (cmnd, "expect"))    return  expect    (args);
@@ -902,9 +976,10 @@ static int dispatch (const char *cmnd, const char *args) {
     if  (0==strcmp (cmnd, "verbose"))   return  verbose   (args);
     if  (0==strcmp (cmnd, "direction")) return  direction (args);
     if  (0==strcmp (cmnd, "tolerance")) return  tolerance (args);
-    if  (0==strcmp (cmnd, "ignore"))    return  ignore (args);
+    if  (0==strcmp (cmnd, "ignore"))    return  ignore    (args);
     if  (0==strcmp (cmnd, "builtins"))  return  builtins  (args);
     if  (0==strcmp (cmnd, "echo"))      return  echo      (args);
+    if  (0==strcmp (cmnd, "skip"))      return  skip      (args);
 
     return 0;
 }
@@ -1223,6 +1298,8 @@ static int nextline (ffio *G) {
 Read next line of input file. Returns 1 on success, 0 on failure.
 ****************************************************************************************/
     G->next_args[0] = 0;
+    if (T.skip)
+        return 0;
     if (0==fgets (G->next_args, (int) G->next_args_size - 1, G->f))
         return 0;
     if (feof (G->f))
@@ -1570,7 +1647,7 @@ static int pj_cart_selftest (void) {
 
     /* Forward projection: Ellipsoidal-to-3D-Cartesian */
     dist = proj_roundtrip (P, PJ_FWD, 1, &a);
-    if (dist > 1e-12)
+    if (dist > 1e-9)
         return 8;
 
     /* Test at the South Pole */
@@ -1582,7 +1659,7 @@ static int pj_cart_selftest (void) {
 
     /* Forward projection: Ellipsoidal-to-3D-Cartesian */
     dist = proj_roundtrip (P, PJ_FWD, 1, &a);
-    if (dist > 1e-12)
+    if (dist > 1e-9)
         return 9;
 
 


=====================================
src/pj_mlfn.c
=====================================
--- a/src/pj_mlfn.c
+++ b/src/pj_mlfn.c
@@ -1,5 +1,5 @@
 #include <projects.h>
-/* meridinal distance for ellipsoid and inverse
+/* meridional distance for ellipsoid and inverse
 **	8th degree - accurate to < 1e-5 meters when used in conjunction
 **		with typical major axis values.
 **	Inverse determines phi to EPS (1e-11) radians, about 1e-6 seconds.


=====================================
test/CMakeLists.txt
=====================================
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -8,6 +8,7 @@ proj_add_gie_test("Deformation" "gie/deformation.gie")
 proj_add_gie_test("Ellipsoid" "gie/ellipsoid.gie")
 proj_add_gie_test("GDA" "gie/GDA.gie")
 proj_add_gie_test("4D-API-cs2cs-style" "gie/4D-API_cs2cs-style.gie")
+proj_add_gie_test("DHDN_ETRS89" "gie/DHDN_ETRS89.gie")
 
 # GIGS tests. Uncommented tests are expected to fail due to issues with
 # various projections. Should be investigated further and fixed.


=====================================
test/gie/DHDN_ETRS89.gie
=====================================
--- /dev/null
+++ b/test/gie/DHDN_ETRS89.gie
@@ -0,0 +1,373 @@
+<gie>
+
+-------------------------------------------------------------------------------
+operation proj=latlong datum=potsdam ellps=bessel
+-------------------------------------------------------------------------------
+DE_DHDN (BeTA, 2007) to ETRS89 using NTv2 grid. epsg:15948
+-------------------------------------------------------------------------------
+
+tolerance 1 mm
+accept       7.482506019176  53.498461143331  # ETRS89_Lat-Lon
+expect       7.483333333333  53.500000000000  # DE_DHDN_Lat-Lon
+
+direction    inverse
+
+accept       7.483333333333  53.500000000000  # DE_DHDN_Lat-Lon
+expect       7.482506019176  53.498461143331  # ETRS89_Lat-Lon
+accept      10.333333333333  48.833333333333  # DE_DHDN_Lat-Lon
+expect      10.332117283303  48.832327188640  # ETRS89_Lat-Lon
+accept       8.000000000000  50.083333333333  # DE_DHDN_Lat-Lon
+expect       7.999097344043  50.082172046476  # ETRS89_Lat-Lon
+accept      10.016666666667  51.033333333333  # DE_DHDN_Lat-Lon
+expect      10.015460839103  51.032075951188  # ETRS89_Lat-Lon
+accept      10.466666666667  54.333333333333  # DE_DHDN_Lat-Lon
+expect      10.465373788153  54.331696254077  # ETRS89_Lat-Lon
+accept      10.750000000000  53.583333333333  # DE_DHDN_Lat-Lon
+expect      10.748659705929  53.581781243436  # ETRS89_Lat-Lon
+accept      10.016666666667  53.500000000000  # DE_DHDN_Lat-Lon
+expect      10.015444367463  53.498457503620  # ETRS89_Lat-Lon
+accept      11.000000000000  53.466666666667  # DE_DHDN_Lat-Lon
+expect      10.998619309575  53.465127257963  # ETRS89_Lat-Lon
+accept      13.466666666667  53.766666666667  # DE_DHDN_Lat-Lon
+expect      13.464877774631  53.765109112396  # ETRS89_Lat-Lon
+accept      10.983333333333  52.766666666667  # DE_DHDN_Lat-Lon
+expect      10.981965431979  52.765211787713  # ETRS89_Lat-Lon
+accept      13.000000000000  51.783333333333  # DE_DHDN_Lat-Lon
+expect      12.998336654827  51.782006921265  # ETRS89_Lat-Lon
+accept      10.466666666667  52.500000000000  # DE_DHDN_Lat-Lon
+expect      10.465380298337  52.498573633365  # ETRS89_Lat-Lon
+accept      10.550000000000  51.466666666667  # DE_DHDN_Lat-Lon
+expect      10.548711467380  51.465361979987  # ETRS89_Lat-Lon
+accept      10.450000000000  50.583333333333  # DE_DHDN_Lat-Lon
+expect      10.448735275612  50.582129474187  # ETRS89_Lat-Lon
+accept      10.416666666667  49.666666666667  # DE_DHDN_Lat-Lon
+expect      10.415423634267  49.665566047661  # ETRS89_Lat-Lon
+accept      10.550000000000  47.750000000000  # DE_DHDN_Lat-Lon
+expect      10.548775945187  47.749120260296  # ETRS89_Lat-Lon
+accept      13.450000000000  50.666666666667  # DE_DHDN_Lat-Lon
+expect      13.448283429558  50.665476385913  # ETRS89_Lat-Lon
+accept      13.550000000000  51.333333333333  # DE_DHDN_Lat-Lon
+expect      13.548264242652  51.332063317958  # ETRS89_Lat-Lon
+accept      13.566666666667  52.050000000000  # DE_DHDN_Lat-Lon
+expect      13.564906713066  52.048646469731  # ETRS89_Lat-Lon
+accept      13.433333333333  53.166666666667  # DE_DHDN_Lat-Lon
+expect      13.431569610583  53.165185284138  # ETRS89_Lat-Lon
+accept      13.466666666667  52.483333333333  # DE_DHDN_Lat-Lon
+expect      13.464913254978  52.481930297429  # ETRS89_Lat-Lon
+accept      13.133333333333  49.066666666667  # DE_DHDN_Lat-Lon
+expect      13.131706947050  49.065661709281  # ETRS89_Lat-Lon
+accept       8.666666666667  53.116666666667  # DE_DHDN_Lat-Lon
+expect       8.665654272188  53.115169791635  # ETRS89_Lat-Lon
+accept      12.950000000000  47.650000000000  # DE_DHDN_Lat-Lon
+expect      12.948437185277  47.649155713893  # ETRS89_Lat-Lon
+accept       8.500000000000  54.716666666667  # DE_DHDN_Lat-Lon
+expect       8.499027339833  54.714992333813  # ETRS89_Lat-Lon
+accept       7.483333333333  51.983333333333  # DE_DHDN_Lat-Lon
+expect       7.482494584516  51.981965147975  # ETRS89_Lat-Lon
+accept       7.516666666667  51.016666666667  # DE_DHDN_Lat-Lon
+expect       7.515823996992  51.015402184493  # ETRS89_Lat-Lon
+accept       7.466666666667  50.500000000000  # DE_DHDN_Lat-Lon
+expect       7.465834308888  50.498791390585  # ETRS89_Lat-Lon
+accept       7.533333333333  49.333333333333  # DE_DHDN_Lat-Lon
+expect       7.532503616986  49.332250779407  # ETRS89_Lat-Lon
+accept       7.250000000000  49.333333333333  # DE_DHDN_Lat-Lon
+expect       7.249209260581  49.332249456364  # ETRS89_Lat-Lon
+accept       7.533333333333  47.666666666667  # DE_DHDN_Lat-Lon
+expect       7.532530252396  47.665765608135  # ETRS89_Lat-Lon
+-------------------------------------------------------------------------------
+
+
+
+-------------------------------------------------------------------------------
+operation proj=latlong
+          towgs84=598.1,73.7,418.2,0.202,0.045,-2.455,6.7 ellps=bessel
+-------------------------------------------------------------------------------
+DE_DHDN to ETRS89 using deprecated 7 parameter Helmert transform. The results
+agree at the 3 m level.
+-------------------------------------------------------------------------------
+tolerance 3 m
+
+accept       7.482506019176  53.498461143331  # ETRS89_Lat-Lon
+expect       7.483333333333  53.500000000000  # DE_DHDN_Lat-Lon
+
+direction inverse
+
+accept       7.483333333333  53.500000000000  # DE_DHDN_Lat-Lon
+expect       7.482506019176  53.498461143331  # ETRS89_Lat-Lon
+
+accept      10.333333333333  48.833333333333  # DE_DHDN_Lat-Lon
+expect      10.332117283303  48.832327188640  # ETRS89_Lat-Lon
+accept       8.000000000000  50.083333333333  # DE_DHDN_Lat-Lon
+expect       7.999097344043  50.082172046476  # ETRS89_Lat-Lon
+accept      10.016666666667  51.033333333333  # DE_DHDN_Lat-Lon
+expect      10.015460839103  51.032075951188  # ETRS89_Lat-Lon
+accept      10.466666666667  54.333333333333  # DE_DHDN_Lat-Lon
+expect      10.465373788153  54.331696254077  # ETRS89_Lat-Lon
+accept      10.750000000000  53.583333333333  # DE_DHDN_Lat-Lon
+expect      10.748659705929  53.581781243436  # ETRS89_Lat-Lon
+accept      10.016666666667  53.500000000000  # DE_DHDN_Lat-Lon
+expect      10.015444367463  53.498457503620  # ETRS89_Lat-Lon
+accept      11.000000000000  53.466666666667  # DE_DHDN_Lat-Lon
+expect      10.998619309575  53.465127257963  # ETRS89_Lat-Lon
+accept      13.466666666667  53.766666666667  # DE_DHDN_Lat-Lon
+expect      13.464877774631  53.765109112396  # ETRS89_Lat-Lon
+accept      10.983333333333  52.766666666667  # DE_DHDN_Lat-Lon
+expect      10.981965431979  52.765211787713  # ETRS89_Lat-Lon
+accept      13.000000000000  51.783333333333  # DE_DHDN_Lat-Lon
+expect      12.998336654827  51.782006921265  # ETRS89_Lat-Lon
+accept      10.466666666667  52.500000000000  # DE_DHDN_Lat-Lon
+expect      10.465380298337  52.498573633365  # ETRS89_Lat-Lon
+accept      10.550000000000  51.466666666667  # DE_DHDN_Lat-Lon
+expect      10.548711467380  51.465361979987  # ETRS89_Lat-Lon
+accept      10.450000000000  50.583333333333  # DE_DHDN_Lat-Lon
+expect      10.448735275612  50.582129474187  # ETRS89_Lat-Lon
+accept      10.416666666667  49.666666666667  # DE_DHDN_Lat-Lon
+expect      10.415423634267  49.665566047661  # ETRS89_Lat-Lon
+accept      10.550000000000  47.750000000000  # DE_DHDN_Lat-Lon
+expect      10.548775945187  47.749120260296  # ETRS89_Lat-Lon
+accept      13.450000000000  50.666666666667  # DE_DHDN_Lat-Lon
+expect      13.448283429558  50.665476385913  # ETRS89_Lat-Lon
+accept      13.550000000000  51.333333333333  # DE_DHDN_Lat-Lon
+expect      13.548264242652  51.332063317958  # ETRS89_Lat-Lon
+accept      13.566666666667  52.050000000000  # DE_DHDN_Lat-Lon
+expect      13.564906713066  52.048646469731  # ETRS89_Lat-Lon
+accept      13.433333333333  53.166666666667  # DE_DHDN_Lat-Lon
+expect      13.431569610583  53.165185284138  # ETRS89_Lat-Lon
+accept      13.466666666667  52.483333333333  # DE_DHDN_Lat-Lon
+expect      13.464913254978  52.481930297429  # ETRS89_Lat-Lon
+accept      13.133333333333  49.066666666667  # DE_DHDN_Lat-Lon
+expect      13.131706947050  49.065661709281  # ETRS89_Lat-Lon
+accept       8.666666666667  53.116666666667  # DE_DHDN_Lat-Lon
+expect       8.665654272188  53.115169791635  # ETRS89_Lat-Lon
+accept      12.950000000000  47.650000000000  # DE_DHDN_Lat-Lon
+expect      12.948437185277  47.649155713893  # ETRS89_Lat-Lon
+accept       8.500000000000  54.716666666667  # DE_DHDN_Lat-Lon
+expect       8.499027339833  54.714992333813  # ETRS89_Lat-Lon
+accept       7.483333333333  51.983333333333  # DE_DHDN_Lat-Lon
+expect       7.482494584516  51.981965147975  # ETRS89_Lat-Lon
+accept       7.516666666667  51.016666666667  # DE_DHDN_Lat-Lon
+expect       7.515823996992  51.015402184493  # ETRS89_Lat-Lon
+accept       7.466666666667  50.500000000000  # DE_DHDN_Lat-Lon
+expect       7.465834308888  50.498791390585  # ETRS89_Lat-Lon
+accept       7.533333333333  49.333333333333  # DE_DHDN_Lat-Lon
+expect       7.532503616986  49.332250779407  # ETRS89_Lat-Lon
+accept       7.250000000000  49.333333333333  # DE_DHDN_Lat-Lon
+expect       7.249209260581  49.332249456364  # ETRS89_Lat-Lon
+accept       7.533333333333  47.666666666667  # DE_DHDN_Lat-Lon
+expect       7.532530252396  47.665765608135  # ETRS89_Lat-Lon
+-------------------------------------------------------------------------------
+</gie>
+
+
+
+
+
+
+
+
+
+
+-------------------------------------------------------------------------------
+The numerical material in this file is based on the contents of the
+BKG test data file over at http://crs.bkg.bund.de/crseu/crs/descrtrans/BeTA/BETA2007testdaten.csv
+
+The conversion was carried out as follows:
+
+set insertkey=gawk 'BEGIN {FS=","}; {print $3","$0}
+set reformat=gawk 'BEGIN {FS=","}; {print "accept      " $6  "  " $5 "  # " $4 "\nexpect      " $9 "  " $8 "  # " $7}'
+cat BETA2007testdaten.csv | %insertkey% | sort | %reformat%  >DHDN_ETRS89.gie
+-------------------------------------------------------------------------------
+
+
+-------------------------------------------------------------------------------
+Tests for GK system zones to UTM32/33 not implemented yet
+-------------------------------------------------------------------------------
+accept      2598417.333192  5930677.980308  # DE_DHDN_3GK2
+expect       399340.601863  5928794.177992  # ETRS89_UTM32
+accept      2643120.946052  5551463.861308  # DE_DHDN_3GK2
+expect       428391.209209  5548246.766868  # ETRS89_UTM32
+accept      2678509.791823  5890320.494547  # DE_DHDN_3GK2
+expect       477621.722498  5885134.566909  # ETRS89_UTM32
+accept      2661073.960381  6067930.993896  # DE_DHDN_3GK2
+expect       467726.896146  6063191.974102  # ETRS89_UTM32
+accept      2601895.024514  5761935.671777  # DE_DHDN_3GK2
+expect       395783.496871  5760119.715259  # ETRS89_UTM32
+accept      2606412.760026  5654454.411797  # DE_DHDN_3GK2
+expect       395892.865206  5652585.895428  # ETRS89_UTM32
+accept      2604044.332230  5596917.811668  # DE_DHDN_3GK2
+expect       391195.030128  5595215.127880  # ETRS89_UTM32
+accept      2611430.565041  5467270.623504  # DE_DHDN_3GK2
+expect       393381.121595  5465427.351346  # ETRS89_UTM32
+accept      2590840.678885  5466891.206854  # DE_DHDN_3GK2
+expect       372799.647928  5465865.755414  # ETRS89_UTM32
+accept      2615145.447136  5281966.148083  # DE_DHDN_3GK2
+expect       389829.267589  5280195.601333  # ETRS89_UTM32
+accept      3399371.190396  5930724.531323  # DE_DHDN_3GK3
+expect       399340.601862  5928794.177992  # ETRS89_UTM32
+accept      3597874.421966  5411397.512092  # DE_DHDN_3GK3
+expect       597759.898637  5409672.239612  # ETRS89_UTM32
+accept      3428437.612810  5550026.645035  # DE_DHDN_3GK3
+expect       428391.209209  5548246.766869  # ETRS89_UTM32
+accept      3571307.006323  5655705.338031  # DE_DHDN_3GK3
+expect       571204.563344  5653882.476948  # ETRS89_UTM32
+accept      3595392.782000  6023387.959898  # DE_DHDN_3GK3
+expect       595286.044398  6021417.376973  # ETRS89_UTM32
+accept      3615881.001454  5940351.727710  # DE_DHDN_3GK3
+expect       615764.364007  5938413.819150  # ETRS89_UTM32
+accept      3615881.001454  5940351.727710  # DE_DHDN_3GK3
+expect       218617.111391  5945399.220269  # ETRS89_UTM33
+accept      3567455.742115  5930134.904864  # DE_DHDN_3GK3
+expect       567358.390548  5928201.976543  # ETRS89_UTM32
+accept      3632798.076882  5927807.051283  # DE_DHDN_3GK3
+expect       632674.379672  5925873.747901  # ETRS89_UTM32
+accept      3632798.076882  5927807.051283  # DE_DHDN_3GK3
+expect       234423.486615  5931470.592457  # ETRS89_UTM33
+accept      3633848.721200  5849896.198513  # DE_DHDN_3GK3
+expect       633723.734075  5847994.536970  # ETRS89_UTM32
+accept      3633848.721200  5849896.198513  # DE_DHDN_3GK3
+expect       228947.171966  5853725.067987  # ETRS89_UTM33
+accept      3599586.686397  5819391.659845  # DE_DHDN_3GK3
+expect       599474.934168  5817502.626999  # ETRS89_UTM32
+accept      3607695.214682  5704557.217497  # DE_DHDN_3GK3
+expect       607578.857121  5702714.405562  # ETRS89_UTM32
+accept      3607695.214682  5704557.217497  # DE_DHDN_3GK3
+expect       190859.292094  5710978.842070  # ETRS89_UTM33
+accept      3602680.921862  5606162.921133  # DE_DHDN_3GK3
+expect       602565.455313  5604359.618990  # ETRS89_UTM32
+accept      3602680.921862  5606162.921133  # DE_DHDN_3GK3
+expect       177845.139712  5613251.897383  # ETRS89_UTM33
+accept      3602255.364740  5504172.212483  # DE_DHDN_3GK3
+expect       602139.527314  5502409.680191  # ETRS89_UTM32
+accept      3602255.364740  5504172.212483  # DE_DHDN_3GK3
+expect       169220.450101  5511545.700292  # ETRS89_UTM33
+accept      3616211.566778  5291255.078896  # DE_DHDN_3GK3
+expect       616089.408439  5289578.131826  # ETRS89_UTM32
+accept      3616211.566778  5291255.078896  # DE_DHDN_3GK3
+expect       166384.067958  5298018.237122  # ETRS89_UTM33
+accept      3477684.063162  5887048.676718  # DE_DHDN_3GK3
+expect       477621.722499  5885134.566914  # ETRS89_UTM32
+accept      3467781.947036  6065176.417740  # DE_DHDN_3GK3
+expect       467726.896147  6063191.974105  # ETRS89_UTM32
+accept      3395815.326925  5761982.907482  # DE_DHDN_3GK3
+expect       395783.496872  5760119.715259  # ETRS89_UTM32
+accept      3395925.872234  5654406.808724  # DE_DHDN_3GK3
+expect       395892.865206  5652585.895428  # ETRS89_UTM32
+accept      3391226.589718  5597013.366086  # DE_DHDN_3GK3
+expect       391195.030128  5595215.127881  # ETRS89_UTM32
+accept      3393414.080125  5467174.397245  # DE_DHDN_3GK3
+expect       393381.121595  5465427.351346  # ETRS89_UTM32
+accept      3372824.499428  5467612.907301  # DE_DHDN_3GK3
+expect       372799.647928  5465865.755413  # ETRS89_UTM32
+accept      3389860.774004  5281869.239226  # DE_DHDN_3GK3
+expect       389829.267590  5280195.601333  # ETRS89_UTM32
+accept      4377657.794741  5411879.839992  # DE_DHDN_3GK4
+expect       597759.898636  5409672.239612  # ETRS89_UTM32
+accept      4360897.154310  5657085.679344  # DE_DHDN_3GK4
+expect       571204.563343  5653882.476947  # ETRS89_UTM32
+accept      4400271.505998  6023480.198072  # DE_DHDN_3GK4
+expect       595286.044399  6021417.376972  # ETRS89_UTM32
+accept      4417225.999425  5939654.081375  # DE_DHDN_3GK4
+expect       615764.364007  5938413.819151  # ETRS89_UTM32
+accept      4417225.999425  5939654.081375  # DE_DHDN_3GK4
+expect       218617.111391  5945399.220269  # ETRS89_UTM33
+accept      4368411.664264  5931484.902370  # DE_DHDN_3GK4
+expect       567358.390548  5928201.976543  # ETRS89_UTM32
+accept      4433598.021986  5926410.006980  # DE_DHDN_3GK4
+expect       632674.379671  5925873.747901  # ETRS89_UTM32
+accept      4433598.021986  5926410.006980  # DE_DHDN_3GK4
+expect       234423.486614  5931470.592457  # ETRS89_UTM33
+accept      4596699.814954  5960328.296681  # DE_DHDN_3GK4
+expect       794226.051532  5966642.993890  # ETRS89_UTM32
+accept      4596699.814954  5960328.296681  # DE_DHDN_3GK4
+expect       398811.452821  5958481.617326  # ETRS89_UTM33
+accept      4431385.771953  5848536.122437  # DE_DHDN_3GK4
+expect       633723.734074  5847994.536971  # ETRS89_UTM32
+accept      4431385.771953  5848536.122437  # DE_DHDN_3GK4
+expect       228947.171966  5853725.067987  # ETRS89_UTM33
+accept      4568999.833703  5739119.060681  # DE_DHDN_3GK4
+expect       775766.817929  5744357.999264  # ETRS89_UTM32
+accept      4568999.833703  5739119.060681  # DE_DHDN_3GK4
+expect       361924.813552  5738688.111797  # ETRS89_UTM33
+accept      4395886.918912  5819485.694352  # DE_DHDN_3GK4
+expect       599474.934169  5817502.626999  # ETRS89_UTM32
+accept      4399252.521454  5704414.901133  # DE_DHDN_3GK4
+expect       607578.857121  5702714.405563  # ETRS89_UTM32
+accept      4399252.521454  5704414.901133  # DE_DHDN_3GK4
+expect       190859.292094  5710978.842070  # ETRS89_UTM33
+accept      4390237.957560  5606306.171667  # DE_DHDN_3GK4
+expect       602565.455313  5604359.618990  # ETRS89_UTM32
+accept      4390237.957560  5606306.171667  # DE_DHDN_3GK4
+expect       177845.139712  5613251.897384  # ETRS89_UTM33
+accept      4385715.060070  5504412.338975  # DE_DHDN_3GK4
+expect       602139.527314  5502409.680191  # ETRS89_UTM32
+accept      4385715.060070  5504412.338975  # DE_DHDN_3GK4
+expect       169220.450101  5511545.700292  # ETRS89_UTM33
+accept      4391285.796869  5291109.755123  # DE_DHDN_3GK4
+expect       616089.408439  5289578.131827  # ETRS89_UTM32
+accept      4391285.796869  5291109.755123  # DE_DHDN_3GK4
+expect       166384.067958  5298018.237122  # ETRS89_UTM33
+accept      4602499.566145  5615431.379860  # DE_DHDN_3GK4
+expect       814311.364242  5622071.326313  # ETRS89_UTM32
+accept      4602499.566145  5615431.379860  # DE_DHDN_3GK4
+expect       390338.211462  5613774.353256  # ETRS89_UTM33
+accept      4608008.855658  5689725.987089  # DE_DHDN_3GK4
+expect       816793.461724  5696579.298817  # ETRS89_UTM32
+accept      4608008.855658  5689725.987089  # DE_DHDN_3GK4
+expect       398863.493307  5687753.129020  # ETRS89_UTM33
+accept      4607459.254388  5769472.054323  # DE_DHDN_3GK4
+expect       812962.846098  5776288.882564  # ETRS89_UTM32
+accept      4607459.254388  5769472.054323  # DE_DHDN_3GK4
+expect       401589.388273  5767420.751372  # ETRS89_UTM33
+accept      4595844.509596  5893520.178529  # DE_DHDN_3GK4
+expect       796184.889876  5899821.806119  # ETRS89_UTM32
+accept      4595844.509596  5893520.178529  # DE_DHDN_3GK4
+expect       395147.893839  5891795.036022  # ETRS89_UTM33
+accept      4599624.347102  5817537.418158  # DE_DHDN_3GK4
+expect       803137.012417  5824018.671556  # ETRS89_UTM32
+accept      4599624.347102  5817537.418158  # DE_DHDN_3GK4
+expect       395754.092849  5815749.835902  # ETRS89_UTM33
+accept      4582806.457775  5437104.667215  # DE_DHDN_3GK4
+expect       801769.133341  5442981.626260  # ETRS89_UTM32
+accept      4582806.457775  5437104.667215  # DE_DHDN_3GK4
+expect       363531.446507  5436436.282581  # ETRS89_UTM33
+accept      4571363.304563  5279411.440581  # DE_DHDN_3GK4
+expect       796505.582915  5284862.664428  # ETRS89_UTM32
+accept      4571363.304563  5279411.440581  # DE_DHDN_3GK4
+expect       345930.907036  5279345.459526  # ETRS89_UTM33
+accept      5398905.047545  5960421.130827  # DE_DHDN_3GK5
+expect       794226.051532  5966642.993889  # ETRS89_UTM32
+accept      5398905.047545  5960421.130827  # DE_DHDN_3GK5
+expect       398811.452821  5958481.617326  # ETRS89_UTM33
+accept      5362005.247500  5740538.568445  # DE_DHDN_3GK5
+expect       775766.817929  5744357.999262  # ETRS89_UTM32
+accept      5362005.247500  5740538.568445  # DE_DHDN_3GK5
+expect       361924.813551  5738688.111796  # ETRS89_UTM33
+accept      5390431.824773  5615574.548074  # DE_DHDN_3GK5
+expect       814311.364241  5622071.326313  # ETRS89_UTM32
+accept      5390431.824773  5615574.548074  # DE_DHDN_3GK5
+expect       390338.211462  5613774.353256  # ETRS89_UTM33
+accept      5398959.121385  5689583.521018  # DE_DHDN_3GK5
+expect       816793.461724  5696579.298817  # ETRS89_UTM32
+accept      5398959.121385  5689583.521018  # DE_DHDN_3GK5
+expect       398863.493307  5687753.129020  # ETRS89_UTM33
+accept      5401685.729154  5769283.220752  # DE_DHDN_3GK5
+expect       812962.846098  5776288.882564  # ETRS89_UTM32
+accept      5401685.729154  5769283.220752  # DE_DHDN_3GK5
+expect       401589.388272  5767420.751372  # ETRS89_UTM33
+accept      5395240.318989  5893707.029636  # DE_DHDN_3GK5
+expect       796184.889876  5899821.806119  # ETRS89_UTM32
+accept      5395240.318989  5893707.029636  # DE_DHDN_3GK5
+expect       395147.893840  5891795.036022  # ETRS89_UTM33
+accept      5395847.545864  5817631.467237  # DE_DHDN_3GK5
+expect       803137.012417  5824018.671556  # ETRS89_UTM32
+accept      5395847.545864  5817631.467237  # DE_DHDN_3GK5
+expect       395754.092849  5815749.835902  # ETRS89_UTM33
+accept      5363615.032963  5438164.610427  # DE_DHDN_3GK5
+expect       801769.133341  5442981.626260  # ETRS89_UTM32
+accept      5363615.032963  5438164.610427  # DE_DHDN_3GK5
+expect       363531.446506  5436436.282581  # ETRS89_UTM33
+accept      5346007.854521  5281010.564511  # DE_DHDN_3GK5
+expect       796505.582915  5284862.664427  # ETRS89_UTM32
+accept      5346007.854521  5281010.564511  # DE_DHDN_3GK5
+expect       345930.907036  5279345.459525  # ETRS89_UTM33
+-------------------------------------------------------------------------------


=====================================
test/gie/Makefile.am
=====================================
--- a/test/gie/Makefile.am
+++ b/test/gie/Makefile.am
@@ -8,7 +8,8 @@ EXTRA_DIST = 4D-API_cs2cs-style.gie \
 	deformation.gie \
 	ellipsoid.gie \
 	more_builtins.gie \
-	unitconvert.gie
+	unitconvert.gie \
+	DHDN_ETRS89.gie
 
 PROJ_LIB ?= $(top_srcdir)/nad
 
@@ -36,4 +37,7 @@ more_builtins: more_builtins.gie
 unitconvert: unitconvert.gie
 	PROJ_LIB=$(PROJ_LIB) $(GIEEXE) $<
 
-check-local: 4D-API-cs2cs-style GDA axisswap builtins deformation ellipsoid more_builtins unitconvert
+DHDN_ETRS89:
+	PROJ_LIB=$(PROJ_LIB) $(GIEEXE) $<
+
+check-local: 4D-API-cs2cs-style GDA axisswap builtins deformation ellipsoid more_builtins unitconvert DHDN_ETRS89


=====================================
test/gie/Makefile.in
=====================================
--- a/test/gie/Makefile.in
+++ b/test/gie/Makefile.in
@@ -250,7 +250,8 @@ EXTRA_DIST = 4D-API_cs2cs-style.gie \
 	deformation.gie \
 	ellipsoid.gie \
 	more_builtins.gie \
-	unitconvert.gie
+	unitconvert.gie \
+	DHDN_ETRS89.gie
 
 all: all-am
 
@@ -472,7 +473,10 @@ more_builtins: more_builtins.gie
 unitconvert: unitconvert.gie
 	PROJ_LIB=$(PROJ_LIB) $(GIEEXE) $<
 
-check-local: 4D-API-cs2cs-style GDA axisswap builtins deformation ellipsoid more_builtins unitconvert
+DHDN_ETRS89:
+	PROJ_LIB=$(PROJ_LIB) $(GIEEXE) $<
+
+check-local: 4D-API-cs2cs-style GDA axisswap builtins deformation ellipsoid more_builtins unitconvert DHDN_ETRS89
 
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.



View it on GitLab: https://salsa.debian.org/debian-gis-team/proj/compare/b6bab78a4fd6ccdc765e9b191e836387a8972a4e...a6df7664c71c94843a28da25bb921e6310dc76d8

---
View it on GitLab: https://salsa.debian.org/debian-gis-team/proj/compare/b6bab78a4fd6ccdc765e9b191e836387a8972a4e...a6df7664c71c94843a28da25bb921e6310dc76d8
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-grass-devel/attachments/20180223/745b3476/attachment-0001.html>


More information about the Pkg-grass-devel mailing list