aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/PJ_robin.c6
-rw-r--r--src/geodesic.c3
-rw-r--r--src/geodtest.c487
-rw-r--r--src/nad_intr.c9
-rw-r--r--src/pj_apply_vgridshift.c2
-rw-r--r--src/pj_init.c16
-rw-r--r--src/pj_internal.c16
-rw-r--r--src/proj.h2
-rw-r--r--src/proj_internal.h10
9 files changed, 299 insertions, 252 deletions
diff --git a/src/PJ_robin.c b/src/PJ_robin.c
index 7514b325..92aebfd3 100644
--- a/src/PJ_robin.c
+++ b/src/PJ_robin.c
@@ -1,4 +1,5 @@
#define PJ_LIB__
+#include "proj_internal.h"
#include "proj.h"
#include "projects.h"
@@ -80,7 +81,8 @@ static XY s_forward (LP lp, PJ *P) { /* Spheroidal, forward */
double dphi;
(void) P;
- i = (int)floor((dphi = fabs(lp.phi)) * C1);
+ dphi = fabs(lp.phi);
+ i = pj_is_nan(lp.phi) ? -1 : (int)floor(dphi * C1);
if( i < 0 ){
proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
return xy;
@@ -115,7 +117,7 @@ static LP s_inverse (XY xy, PJ *P) { /* Spheroidal, inverse */
}
} else { /* general problem */
/* in Y space, reduce to table interval */
- i = (int)floor(lp.phi * NODES);
+ i = pj_is_nan(lp.phi) ? -1 : (int)floor(lp.phi * NODES);
if( i < 0 || i >= NODES ) {
proj_errno_set(P, PJD_ERR_TOLERANCE_CONDITION);
return lp;
diff --git a/src/geodesic.c b/src/geodesic.c
index 91af23f9..eb956c65 100644
--- a/src/geodesic.c
+++ b/src/geodesic.c
@@ -239,7 +239,8 @@ static void sincosdx(real x, real* sinx, real* cosx) {
r = remquo(x, (real)(90), &q);
#else
r = fmod(x, (real)(360));
- /* check for NaN */
+ /* check for NaN -- do not use pj_is_nan, since we want geodesic.c not to
+ * depend on the rest of proj.4 */
q = r == r ? (int)(floor(r / 90 + (real)(0.5))) : 0;
r -= 90 * q;
#endif
diff --git a/src/geodtest.c b/src/geodtest.c
index 1025ce08..0ee86d5c 100644
--- a/src/geodtest.c
+++ b/src/geodtest.c
@@ -22,10 +22,17 @@
static const double wgs84_a = 6378137, wgs84_f = 1/298.257223563; /* WGS84 */
-static int assertEquals(double x, double y, double d) {
+static int checkEquals(double x, double y, double d) {
if (fabs(x - y) <= d)
return 0;
- printf("assertEquals fails: %.7g != %.7g +/- %.7g\n", x, y, d);
+ printf("checkEquals fails: %.7g != %.7g +/- %.7g\n", x, y, d);
+ return 1;
+}
+
+static int checkNaN(double x) {
+ if (x != x)
+ return 0;
+ printf("checkNaN fails: %.7g\n", x);
return 1;
}
@@ -125,14 +132,14 @@ static int testinverse() {
M12 = testcases[i][9]; M21 = testcases[i][10]; S12 = testcases[i][11];
a12a = geod_geninverse(&g, lat1, lon1, lat2, lon2, &s12a, &azi1a, &azi2a,
&m12a, &M12a, &M21a, &S12a);
- result += assertEquals(azi1, azi1a, 1e-13);
- result += assertEquals(azi2, azi2a, 1e-13);
- result += assertEquals(s12, s12a, 1e-8);
- result += assertEquals(a12, a12a, 1e-13);
- result += assertEquals(m12, m12a, 1e-8);
- result += assertEquals(M12, M12a, 1e-15);
- result += assertEquals(M21, M21a, 1e-15);
- result += assertEquals(S12, S12a, 0.1);
+ result += checkEquals(azi1, azi1a, 1e-13);
+ result += checkEquals(azi2, azi2a, 1e-13);
+ result += checkEquals(s12, s12a, 1e-8);
+ result += checkEquals(a12, a12a, 1e-13);
+ result += checkEquals(m12, m12a, 1e-8);
+ result += checkEquals(M12, M12a, 1e-15);
+ result += checkEquals(M21, M21a, 1e-15);
+ result += checkEquals(S12, S12a, 0.1);
}
return result;
}
@@ -152,14 +159,14 @@ static int testdirect() {
a12a = geod_gendirect(&g, lat1, lon1, azi1, flags, s12,
&lat2a, &lon2a, &azi2a, 0,
&m12a, &M12a, &M21a, &S12a);
- result += assertEquals(lat2, lat2a, 1e-13);
- result += assertEquals(lon2, lon2a, 1e-13);
- result += assertEquals(azi2, azi2a, 1e-13);
- result += assertEquals(a12, a12a, 1e-13);
- result += assertEquals(m12, m12a, 1e-8);
- result += assertEquals(M12, M12a, 1e-15);
- result += assertEquals(M21, M21a, 1e-15);
- result += assertEquals(S12, S12a, 0.1);
+ result += checkEquals(lat2, lat2a, 1e-13);
+ result += checkEquals(lon2, lon2a, 1e-13);
+ result += checkEquals(azi2, azi2a, 1e-13);
+ result += checkEquals(a12, a12a, 1e-13);
+ result += checkEquals(m12, m12a, 1e-8);
+ result += checkEquals(M12, M12a, 1e-15);
+ result += checkEquals(M21, M21a, 1e-15);
+ result += checkEquals(S12, S12a, 0.1);
}
return result;
}
@@ -178,14 +185,14 @@ static int testarcdirect() {
M12 = testcases[i][9]; M21 = testcases[i][10]; S12 = testcases[i][11];
geod_gendirect(&g, lat1, lon1, azi1, flags, a12,
&lat2a, &lon2a, &azi2a, &s12a, &m12a, &M12a, &M21a, &S12a);
- result += assertEquals(lat2, lat2a, 1e-13);
- result += assertEquals(lon2, lon2a, 1e-13);
- result += assertEquals(azi2, azi2a, 1e-13);
- result += assertEquals(s12, s12a, 1e-8);
- result += assertEquals(m12, m12a, 1e-8);
- result += assertEquals(M12, M12a, 1e-15);
- result += assertEquals(M21, M21a, 1e-15);
- result += assertEquals(S12, S12a, 0.1);
+ result += checkEquals(lat2, lat2a, 1e-13);
+ result += checkEquals(lon2, lon2a, 1e-13);
+ result += checkEquals(azi2, azi2a, 1e-13);
+ result += checkEquals(s12, s12a, 1e-8);
+ result += checkEquals(m12, m12a, 1e-8);
+ result += checkEquals(M12, M12a, 1e-15);
+ result += checkEquals(M21, M21a, 1e-15);
+ result += checkEquals(S12, S12a, 0.1);
}
return result;
}
@@ -196,9 +203,9 @@ static int GeodSolve0() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 40.6, -73.8, 49.01666667, 2.55, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 53.47022, 0.5e-5);
- result += assertEquals(azi2, 111.59367, 0.5e-5);
- result += assertEquals(s12, 5853226, 0.5);
+ result += checkEquals(azi1, 53.47022, 0.5e-5);
+ result += checkEquals(azi2, 111.59367, 0.5e-5);
+ result += checkEquals(s12, 5853226, 0.5);
return result;
}
@@ -209,9 +216,9 @@ static int GeodSolve1() {
geod_init(&g, wgs84_a, wgs84_f);
geod_direct(&g, 40.63972222, -73.77888889, 53.5, 5850e3,
&lat2, &lon2, &azi2);
- result += assertEquals(lat2, 49.01467, 0.5e-5);
- result += assertEquals(lon2, 2.56106, 0.5e-5);
- result += assertEquals(azi2, 111.62947, 0.5e-5);
+ result += checkEquals(lat2, 49.01467, 0.5e-5);
+ result += checkEquals(lon2, 2.56106, 0.5e-5);
+ result += checkEquals(azi2, 111.62947, 0.5e-5);
return result;
}
@@ -222,13 +229,13 @@ static int GeodSolve2() {
int result = 0;
geod_init(&g, 6.4e6, -1/150.0);
geod_inverse(&g, 0.07476, 0, -0.07476, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 90.00078, 0.5e-5);
- result += assertEquals(azi2, 90.00078, 0.5e-5);
- result += assertEquals(s12, 20106193, 0.5);
+ result += checkEquals(azi1, 90.00078, 0.5e-5);
+ result += checkEquals(azi2, 90.00078, 0.5e-5);
+ result += checkEquals(s12, 20106193, 0.5);
geod_inverse(&g, 0.1, 0, -0.1, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 90.00105, 0.5e-5);
- result += assertEquals(azi2, 90.00105, 0.5e-5);
- result += assertEquals(s12, 20106193, 0.5);
+ result += checkEquals(azi1, 90.00105, 0.5e-5);
+ result += checkEquals(azi2, 90.00105, 0.5e-5);
+ result += checkEquals(s12, 20106193, 0.5);
return result;
}
@@ -240,7 +247,7 @@ static int GeodSolve4() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 36.493349428792, 0, 36.49334942879201, .0000008,
&s12, 0, 0);
- result += assertEquals(s12, 0.072, 0.5e-3);
+ result += checkEquals(s12, 0.072, 0.5e-3);
return result;
}
@@ -251,13 +258,13 @@ static int GeodSolve5() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
geod_direct(&g, 0.01777745589997, 30, 0, 10e6, &lat2, &lon2, &azi2);
- result += assertEquals(lat2, 90, 0.5e-5);
+ result += checkEquals(lat2, 90, 0.5e-5);
if (lon2 < 0) {
- result += assertEquals(lon2, -150, 0.5e-5);
- result += assertEquals(fabs(azi2), 180, 0.5e-5);
+ result += checkEquals(lon2, -150, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180, 0.5e-5);
} else {
- result += assertEquals(lon2, 30, 0.5e-5);
- result += assertEquals(azi2, 0, 0.5e-5);
+ result += checkEquals(lon2, 30, 0.5e-5);
+ result += checkEquals(azi2, 0, 0.5e-5);
}
return result;
}
@@ -271,13 +278,13 @@ static int GeodSolve6() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 88.202499451857, 0,
-88.202499451857, 179.981022032992859592, &s12, 0, 0);
- result += assertEquals(s12, 20003898.214, 0.5e-3);
+ result += checkEquals(s12, 20003898.214, 0.5e-3);
geod_inverse(&g, 89.262080389218, 0,
-89.262080389218, 179.992207982775375662, &s12, 0, 0);
- result += assertEquals(s12, 20003925.854, 0.5e-3);
+ result += checkEquals(s12, 20003925.854, 0.5e-3);
geod_inverse(&g, 89.333123580033, 0,
-89.333123580032997687, 179.99295812360148422, &s12, 0, 0);
- result += assertEquals(s12, 20003926.881, 0.5e-3);
+ result += checkEquals(s12, 20003926.881, 0.5e-3);
return result;
}
@@ -289,7 +296,7 @@ static int GeodSolve9() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 56.320923501171, 0,
-56.320923501171, 179.664747671772880215, &s12, 0, 0);
- result += assertEquals(s12, 19993558.287, 0.5e-3);
+ result += checkEquals(s12, 19993558.287, 0.5e-3);
return result;
}
@@ -302,7 +309,7 @@ static int GeodSolve10() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 52.784459512564, 0,
-52.784459512563990912, 179.634407464943777557, &s12, 0, 0);
- result += assertEquals(s12, 19991596.095, 0.5e-3);
+ result += checkEquals(s12, 19991596.095, 0.5e-3);
return result;
}
@@ -315,7 +322,7 @@ static int GeodSolve11() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 48.522876735459, 0,
-48.52287673545898293, 179.599720456223079643, &s12, 0, 0);
- result += assertEquals(s12, 19989144.774, 0.5e-3);
+ result += checkEquals(s12, 19989144.774, 0.5e-3);
return result;
}
@@ -328,9 +335,9 @@ static int GeodSolve12() {
int result = 0;
geod_init(&g, 89.8, -1.83);
geod_inverse(&g, 0, 0, -10, 160, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 120.27, 1e-2);
- result += assertEquals(azi2, 105.15, 1e-2);
- result += assertEquals(s12, 266.7, 1e-1);
+ result += checkEquals(azi1, 120.27, 1e-2);
+ result += checkEquals(azi2, 105.15, 1e-2);
+ result += checkEquals(s12, 266.7, 1e-1);
return result;
}
@@ -346,9 +353,9 @@ static int GeodSolve14() {
}
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 0, 0, 1, nan, &s12, &azi1, &azi2);
- result += azi1 == azi1 ? 1 : 0;
- result += azi2 == azi2 ? 1 : 0;
- result += s12 == s12 ? 1 : 0;
+ result += checkNaN(azi1);
+ result += checkNaN(azi2);
+ result += checkNaN(s12);
return result;
}
@@ -361,7 +368,7 @@ static int GeodSolve15() {
geod_init(&g, 6.4e6, -1/150.0);
geod_gendirect(&g, 1, 2, 3, 0, 4,
0, 0, 0, 0, 0, 0, 0, &S12);
- result += assertEquals(S12, 23700, 0.5);
+ result += checkEquals(S12, 23700, 0.5);
return result;
}
@@ -375,22 +382,22 @@ static int GeodSolve17() {
geod_init(&g, wgs84_a, wgs84_f);
geod_gendirect(&g, 40, -75, -10, flags, 2e7,
&lat2, &lon2, &azi2, 0, 0, 0, 0, 0);
- result += assertEquals(lat2, -39, 1);
- result += assertEquals(lon2, -254, 1);
- result += assertEquals(azi2, -170, 1);
+ result += checkEquals(lat2, -39, 1);
+ result += checkEquals(lon2, -254, 1);
+ result += checkEquals(azi2, -170, 1);
geod_lineinit(&l, &g, 40, -75, -10, 0);
geod_genposition(&l, flags, 2e7, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0);
- result += assertEquals(lat2, -39, 1);
- result += assertEquals(lon2, -254, 1);
- result += assertEquals(azi2, -170, 1);
+ result += checkEquals(lat2, -39, 1);
+ result += checkEquals(lon2, -254, 1);
+ result += checkEquals(azi2, -170, 1);
geod_direct(&g, 40, -75, -10, 2e7, &lat2, &lon2, &azi2);
- result += assertEquals(lat2, -39, 1);
- result += assertEquals(lon2, 105, 1);
- result += assertEquals(azi2, -170, 1);
+ result += checkEquals(lat2, -39, 1);
+ result += checkEquals(lon2, 105, 1);
+ result += checkEquals(azi2, -170, 1);
geod_position(&l, 2e7, &lat2, &lon2, &azi2);
- result += assertEquals(lat2, -39, 1);
- result += assertEquals(lon2, 105, 1);
- result += assertEquals(azi2, -170, 1);
+ result += checkEquals(lat2, -39, 1);
+ result += checkEquals(lon2, 105, 1);
+ result += checkEquals(azi2, -170, 1);
return result;
}
@@ -401,7 +408,7 @@ static int GeodSolve26() {
int result = 0;
geod_init(&g, 6.4e6, 0);
geod_geninverse(&g, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, &S12);
- result += assertEquals(S12, 49911046115.0, 0.5);
+ result += checkEquals(S12, 49911046115.0, 0.5);
return result;
}
@@ -413,7 +420,7 @@ static int GeodSolve28() {
int result = 0;
geod_init(&g, 6.4e6, 0.1);
a12 = geod_gendirect(&g, 1, 2, 10, 0, 5e6, 0, 0, 0, 0, 0, 0, 0, 0);
- result += assertEquals(a12, 48.55570690, 0.5e-8);
+ result += checkEquals(a12, 48.55570690, 0.5e-8);
return result;
}
@@ -426,51 +433,51 @@ static int GeodSolve33() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 90.00000, 0.5e-5);
- result += assertEquals(azi2, 90.00000, 0.5e-5);
- result += assertEquals(s12, 19926189, 0.5);
+ result += checkEquals(azi1, 90.00000, 0.5e-5);
+ result += checkEquals(azi2, 90.00000, 0.5e-5);
+ result += checkEquals(s12, 19926189, 0.5);
geod_inverse(&g, 0, 0, 0, 179.5, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 55.96650, 0.5e-5);
- result += assertEquals(azi2, 124.03350, 0.5e-5);
- result += assertEquals(s12, 19980862, 0.5);
+ result += checkEquals(azi1, 55.96650, 0.5e-5);
+ result += checkEquals(azi2, 124.03350, 0.5e-5);
+ result += checkEquals(s12, 19980862, 0.5);
geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 0.00000, 0.5e-5);
- result += assertEquals(fabs(azi2), 180.00000, 0.5e-5);
- result += assertEquals(s12, 20003931, 0.5);
+ result += checkEquals(azi1, 0.00000, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180.00000, 0.5e-5);
+ result += checkEquals(s12, 20003931, 0.5);
geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 0.00000, 0.5e-5);
- result += assertEquals(fabs(azi2), 180.00000, 0.5e-5);
- result += assertEquals(s12, 19893357, 0.5);
+ result += checkEquals(azi1, 0.00000, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180.00000, 0.5e-5);
+ result += checkEquals(s12, 19893357, 0.5);
geod_init(&g, 6.4e6, 0);
geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 90.00000, 0.5e-5);
- result += assertEquals(azi2, 90.00000, 0.5e-5);
- result += assertEquals(s12, 19994492, 0.5);
+ result += checkEquals(azi1, 90.00000, 0.5e-5);
+ result += checkEquals(azi2, 90.00000, 0.5e-5);
+ result += checkEquals(s12, 19994492, 0.5);
geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 0.00000, 0.5e-5);
- result += assertEquals(fabs(azi2), 180.00000, 0.5e-5);
- result += assertEquals(s12, 20106193, 0.5);
+ result += checkEquals(azi1, 0.00000, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180.00000, 0.5e-5);
+ result += checkEquals(s12, 20106193, 0.5);
geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 0.00000, 0.5e-5);
- result += assertEquals(fabs(azi2), 180.00000, 0.5e-5);
- result += assertEquals(s12, 19994492, 0.5);
+ result += checkEquals(azi1, 0.00000, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180.00000, 0.5e-5);
+ result += checkEquals(s12, 19994492, 0.5);
geod_init(&g, 6.4e6, -1/300.0);
geod_inverse(&g, 0, 0, 0, 179, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 90.00000, 0.5e-5);
- result += assertEquals(azi2, 90.00000, 0.5e-5);
- result += assertEquals(s12, 19994492, 0.5);
+ result += checkEquals(azi1, 90.00000, 0.5e-5);
+ result += checkEquals(azi2, 90.00000, 0.5e-5);
+ result += checkEquals(s12, 19994492, 0.5);
geod_inverse(&g, 0, 0, 0, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 90.00000, 0.5e-5);
- result += assertEquals(azi2, 90.00000, 0.5e-5);
- result += assertEquals(s12, 20106193, 0.5);
+ result += checkEquals(azi1, 90.00000, 0.5e-5);
+ result += checkEquals(azi2, 90.00000, 0.5e-5);
+ result += checkEquals(s12, 20106193, 0.5);
geod_inverse(&g, 0, 0, 0.5, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 33.02493, 0.5e-5);
- result += assertEquals(azi2, 146.97364, 0.5e-5);
- result += assertEquals(s12, 20082617, 0.5);
+ result += checkEquals(azi1, 33.02493, 0.5e-5);
+ result += checkEquals(azi2, 146.97364, 0.5e-5);
+ result += checkEquals(s12, 20082617, 0.5);
geod_inverse(&g, 0, 0, 1, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 0.00000, 0.5e-5);
- result += assertEquals(fabs(azi2), 180.00000, 0.5e-5);
- result += assertEquals(s12, 20027270, 0.5);
+ result += checkEquals(azi1, 0.00000, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180.00000, 0.5e-5);
+ result += checkEquals(s12, 20027270, 0.5);
return result;
}
@@ -488,13 +495,13 @@ static int GeodSolve55() {
}
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, nan, 0, 0, 90, &s12, &azi1, &azi2);
- result += azi1 == azi1 ? 1 : 0;
- result += azi2 == azi2 ? 1 : 0;
- result += s12 == s12 ? 1 : 0;
+ result += checkNaN(azi1);
+ result += checkNaN(azi2);
+ result += checkNaN(s12);
geod_inverse(&g, nan, 0, 90, 9, &s12, &azi1, &azi2);
- result += azi1 == azi1 ? 1 : 0;
- result += azi2 == azi2 ? 1 : 0;
- result += s12 == s12 ? 1 : 0;
+ result += checkNaN(azi1);
+ result += checkNaN(azi2);
+ result += checkNaN(s12);
return result;
}
@@ -505,9 +512,9 @@ static int GeodSolve59() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 5, 0.00000000000001, 10, 180, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 0.000000000000035, 1.5e-14);
- result += assertEquals(azi2, 179.99999999999996, 1.5e-14);
- result += assertEquals(s12, 18345191.174332713, 5e-9);
+ result += checkEquals(azi1, 0.000000000000035, 1.5e-14);
+ result += checkEquals(azi2, 179.99999999999996, 1.5e-14);
+ result += checkEquals(s12, 18345191.174332713, 5e-9);
return result;
}
@@ -521,14 +528,14 @@ static int GeodSolve61() {
geod_init(&g, wgs84_a, wgs84_f);
geod_gendirect(&g, 45, 0, -0.000000000000000003, flags, 1e7,
&lat2, &lon2, &azi2, 0, 0, 0, 0, 0);
- result += assertEquals(lat2, 45.30632, 0.5e-5);
- result += assertEquals(lon2, -180, 0.5e-5);
- result += assertEquals(fabs(azi2), 180, 0.5e-5);
+ result += checkEquals(lat2, 45.30632, 0.5e-5);
+ result += checkEquals(lon2, -180, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180, 0.5e-5);
geod_inverseline(&l, &g, 45, 0, 80, -0.000000000000000003, 0);
geod_genposition(&l, flags, 1e7, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0);
- result += assertEquals(lat2, 45.30632, 0.5e-5);
- result += assertEquals(lon2, -180, 0.5e-5);
- result += assertEquals(fabs(azi2), 180, 0.5e-5);
+ result += checkEquals(lat2, 45.30632, 0.5e-5);
+ result += checkEquals(lon2, -180, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180, 0.5e-5);
return result;
}
@@ -545,26 +552,26 @@ static int GeodSolve65() {
geod_inverseline(&l, &g, 30, -0.000000000000000001, -31, 180, caps);
a12 = geod_genposition(&l, flags, 1e7,
&lat2, &lon2, &azi2, &s12, &m12, &M12, &M21, &S12);
- result += assertEquals(lat2, -60.23169, 0.5e-5);
- result += assertEquals(lon2, -0.00000, 0.5e-5);
- result += assertEquals(fabs(azi2), 180.00000, 0.5e-5);
- result += assertEquals(s12, 10000000, 0.5);
- result += assertEquals(a12, 90.06544, 0.5e-5);
- result += assertEquals(m12, 6363636, 0.5);
- result += assertEquals(M12, -0.0012834, 0.5e-7);
- result += assertEquals(M21, 0.0013749, 0.5e-7);
- result += assertEquals(S12, 0, 0.5);
+ result += checkEquals(lat2, -60.23169, 0.5e-5);
+ result += checkEquals(lon2, -0.00000, 0.5e-5);
+ result += checkEquals(fabs(azi2), 180.00000, 0.5e-5);
+ result += checkEquals(s12, 10000000, 0.5);
+ result += checkEquals(a12, 90.06544, 0.5e-5);
+ result += checkEquals(m12, 6363636, 0.5);
+ result += checkEquals(M12, -0.0012834, 0.5e-7);
+ result += checkEquals(M21, 0.0013749, 0.5e-7);
+ result += checkEquals(S12, 0, 0.5);
a12 = geod_genposition(&l, flags, 2e7,
&lat2, &lon2, &azi2, &s12, &m12, &M12, &M21, &S12);
- result += assertEquals(lat2, -30.03547, 0.5e-5);
- result += assertEquals(lon2, -180.00000, 0.5e-5);
- result += assertEquals(azi2, -0.00000, 0.5e-5);
- result += assertEquals(s12, 20000000, 0.5);
- result += assertEquals(a12, 179.96459, 0.5e-5);
- result += assertEquals(m12, 54342, 0.5);
- result += assertEquals(M12, -1.0045592, 0.5e-7);
- result += assertEquals(M21, -0.9954339, 0.5e-7);
- result += assertEquals(S12, 127516405431022.0, 0.5);
+ result += checkEquals(lat2, -30.03547, 0.5e-5);
+ result += checkEquals(lon2, -180.00000, 0.5e-5);
+ result += checkEquals(azi2, -0.00000, 0.5e-5);
+ result += checkEquals(s12, 20000000, 0.5);
+ result += checkEquals(a12, 179.96459, 0.5e-5);
+ result += checkEquals(m12, 54342, 0.5);
+ result += checkEquals(M12, -1.0045592, 0.5e-7);
+ result += checkEquals(M21, -0.9954339, 0.5e-7);
+ result += checkEquals(S12, 127516405431022.0, 0.5);
return result;
}
@@ -579,13 +586,13 @@ static int GeodSolve67() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverseline(&l, &g, -5, -0.000000000000002, -10, 180, 0);
geod_genposition(&l, flags, 2e7, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0);
- result += assertEquals(lat2, 4.96445, 0.5e-5);
- result += assertEquals(lon2, -180.00000, 0.5e-5);
- result += assertEquals(azi2, -0.00000, 0.5e-5);
+ result += checkEquals(lat2, 4.96445, 0.5e-5);
+ result += checkEquals(lon2, -180.00000, 0.5e-5);
+ result += checkEquals(azi2, -0.00000, 0.5e-5);
geod_genposition(&l, flags, 0.5 * l.s13, &lat2, &lon2, &azi2, 0, 0, 0, 0, 0);
- result += assertEquals(lat2, -87.52461, 0.5e-5);
- result += assertEquals(lon2, -0.00000, 0.5e-5);
- result += assertEquals(azi2, -180.00000, 0.5e-5);
+ result += checkEquals(lat2, -87.52461, 0.5e-5);
+ result += checkEquals(lon2, -0.00000, 0.5e-5);
+ result += checkEquals(azi2, -180.00000, 0.5e-5);
return result;
}
@@ -598,9 +605,9 @@ static int GeodSolve71() {
geod_init(&g, wgs84_a, wgs84_f);
geod_directline(&l, &g, 1, 2, 45, 1e7, 0);
geod_position(&l, 0.5 * l.s13, &lat2, &lon2, &azi2);
- result += assertEquals(lat2, 30.92625, 0.5e-5);
- result += assertEquals(lon2, 37.54640, 0.5e-5);
- result += assertEquals(azi2, 55.43104, 0.5e-5);
+ result += checkEquals(lat2, 30.92625, 0.5e-5);
+ result += checkEquals(lon2, 37.54640, 0.5e-5);
+ result += checkEquals(azi2, 55.43104, 0.5e-5);
return result;
}
@@ -614,8 +621,8 @@ static int GeodSolve73() {
geod_init(&g, wgs84_a, wgs84_f);
geod_direct(&g, 90, 10, 180, -1e6,
&lat2, &lon2, &azi2);
- result += assertEquals(lat2, 81.04623, 0.5e-5);
- result += assertEquals(lon2, -170, 0.5e-5);
+ result += checkEquals(lat2, 81.04623, 0.5e-5);
+ result += checkEquals(lon2, -170, 0.5e-5);
result += azi2 == 0 ? 0 : 1;
result += 1/azi2 > 0 ? 0 : 1; /* Check that azi2 = +0.0 not -0.0 */
return result;
@@ -652,14 +659,14 @@ static int GeodSolve74() {
geod_init(&g, wgs84_a, wgs84_f);
a12 = geod_geninverse(&g, 54.1589, 15.3872, 54.1591, 15.3877,
&s12, &azi1, &azi2, &m12, &M12, &M21, &S12);
- result += assertEquals(azi1, 55.723110355, 5e-9);
- result += assertEquals(azi2, 55.723515675, 5e-9);
- result += assertEquals(s12, 39.527686385, 5e-9);
- result += assertEquals(a12, 0.000355495, 5e-9);
- result += assertEquals(m12, 39.527686385, 5e-9);
- result += assertEquals(M12, 0.999999995, 5e-9);
- result += assertEquals(M21, 0.999999995, 5e-9);
- result += assertEquals(S12, 286698586.30197, 5e-4);
+ result += checkEquals(azi1, 55.723110355, 5e-9);
+ result += checkEquals(azi2, 55.723515675, 5e-9);
+ result += checkEquals(s12, 39.527686385, 5e-9);
+ result += checkEquals(a12, 0.000355495, 5e-9);
+ result += checkEquals(m12, 39.527686385, 5e-9);
+ result += checkEquals(M12, 0.999999995, 5e-9);
+ result += checkEquals(M21, 0.999999995, 5e-9);
+ result += checkEquals(S12, 286698586.30197, 5e-4);
return result;
}
@@ -672,9 +679,9 @@ static int GeodSolve76() {
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, -(41+19/60.0), 174+49/60.0, 40+58/60.0, -(5+30/60.0),
&s12, &azi1, &azi2);
- result += assertEquals(azi1, 160.39137649664, 0.5e-11);
- result += assertEquals(azi2, 19.50042925176, 0.5e-11);
- result += assertEquals(s12, 19960543.857179, 0.5e-6);
+ result += checkEquals(azi1, 160.39137649664, 0.5e-11);
+ result += checkEquals(azi2, 19.50042925176, 0.5e-11);
+ result += checkEquals(s12, 19960543.857179, 0.5e-6);
return result;
}
@@ -685,9 +692,9 @@ static int GeodSolve78() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
geod_inverse(&g, 27.2, 0.0, -27.1, 179.5, &s12, &azi1, &azi2);
- result += assertEquals(azi1, 45.82468716758, 0.5e-11);
- result += assertEquals(azi2, 134.22776532670, 0.5e-11);
- result += assertEquals(s12, 19974354.765767, 0.5e-6);
+ result += checkEquals(azi1, 45.82468716758, 0.5e-11);
+ result += checkEquals(azi2, 134.22776532670, 0.5e-11);
+ result += checkEquals(s12, 19974354.765767, 0.5e-6);
return result;
}
@@ -701,35 +708,35 @@ static int GeodSolve80() {
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.00528427534, 0.5e-10);
- result += assertEquals(M21, -0.00528427534, 0.5e-10);
+ result += checkEquals(M12, -0.00528427534, 0.5e-10);
+ result += checkEquals(M21, -0.00528427534, 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);
+ result += checkEquals(M12, 1, 0.5e-10);
+ result += checkEquals(M21, 1, 0.5e-10);
a12 = geod_geninverse(&g, 20.001, 0, 20.001, 0,
&s12, &azi1, &azi2, &m12, &M12, &M21, &S12);
- result += assertEquals(a12, 0, 1e-13);
- result += assertEquals(s12, 0, 1e-8);
- result += assertEquals(azi1, 180, 1e-13);
- result += assertEquals(azi2, 180, 1e-13);
- result += assertEquals(m12, 0, 1e-8);
- result += assertEquals(M12, 1, 1e-15);
- result += assertEquals(M21, 1, 1e-15);
- result += assertEquals(S12, 0, 1e-10);
+ result += checkEquals(a12, 0, 1e-13);
+ result += checkEquals(s12, 0, 1e-8);
+ result += checkEquals(azi1, 180, 1e-13);
+ result += checkEquals(azi2, 180, 1e-13);
+ result += checkEquals(m12, 0, 1e-8);
+ result += checkEquals(M12, 1, 1e-15);
+ result += checkEquals(M21, 1, 1e-15);
+ result += checkEquals(S12, 0, 1e-10);
a12 = geod_geninverse(&g, 90, 0, 90, 180,
&s12, &azi1, &azi2, &m12, &M12, &M21, &S12);
- result += assertEquals(a12, 0, 1e-13);
- result += assertEquals(s12, 0, 1e-8);
- result += assertEquals(azi1, 0, 1e-13);
- result += assertEquals(azi2, 180, 1e-13);
- result += assertEquals(m12, 0, 1e-8);
- result += assertEquals(M12, 1, 1e-15);
- result += assertEquals(M21, 1, 1e-15);
- result += assertEquals(S12, 127516405431022, 0.5);
+ result += checkEquals(a12, 0, 1e-13);
+ result += checkEquals(s12, 0, 1e-8);
+ result += checkEquals(azi1, 0, 1e-13);
+ result += checkEquals(azi2, 180, 1e-13);
+ result += checkEquals(m12, 0, 1e-8);
+ result += checkEquals(M12, 1, 1e-15);
+ result += checkEquals(M21, 1, 1e-15);
+ result += checkEquals(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 ? 1 : 0;
+ result += checkNaN(a12);
return result;
}
@@ -745,23 +752,23 @@ static int Planimeter0() {
geod_init(&g, wgs84_a, wgs84_f);
planimeter(&g, pa, 4, &perimeter, &area);
- result += assertEquals(perimeter, 631819.8745, 1e-4);
- result += assertEquals(area, 24952305678.0, 1);
+ result += checkEquals(perimeter, 631819.8745, 1e-4);
+ result += checkEquals(area, 24952305678.0, 1);
planimeter(&g, pb, 4, &perimeter, &area);
- result += assertEquals(perimeter, 631819.8745, 1e-4);
- result += assertEquals(area, -24952305678.0, 1);
+ result += checkEquals(perimeter, 631819.8745, 1e-4);
+ result += checkEquals(area, -24952305678.0, 1);
planimeter(&g, pc, 4, &perimeter, &area);
- result += assertEquals(perimeter, 627598.2731, 1e-4);
- result += assertEquals(area, 24619419146.0, 1);
+ result += checkEquals(perimeter, 627598.2731, 1e-4);
+ result += checkEquals(area, 24619419146.0, 1);
planimeter(&g, pd, 3, &perimeter, &area);
- result += assertEquals(perimeter, 30022685, 1);
- result += assertEquals(area, 63758202715511.0, 1);
+ result += checkEquals(perimeter, 30022685, 1);
+ result += checkEquals(area, 63758202715511.0, 1);
polylength(&g, pd, 3, &perimeter);
- result += assertEquals(perimeter, 20020719, 1);
+ result += checkEquals(perimeter, 20020719, 1);
return result;
}
@@ -774,8 +781,8 @@ static int Planimeter5() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
planimeter(&g, points, 3, &perimeter, &area);
- result += assertEquals(perimeter, 539297, 1);
- result += assertEquals(area, 12476152838.5, 1);
+ result += checkEquals(perimeter, 539297, 1);
+ result += checkEquals(area, 12476152838.5, 1);
return result;
}
@@ -791,17 +798,17 @@ static int Planimeter6() {
geod_init(&g, wgs84_a, wgs84_f);
planimeter(&g, pa, 3, &perimeter, &area);
- result += assertEquals(perimeter, 36026861, 1);
- result += assertEquals(area, 0, 1);
+ result += checkEquals(perimeter, 36026861, 1);
+ result += checkEquals(area, 0, 1);
planimeter(&g, pb, 3, &perimeter, &area);
- result += assertEquals(perimeter, 36026861, 1);
- result += assertEquals(area, 0, 1);
+ result += checkEquals(perimeter, 36026861, 1);
+ result += checkEquals(area, 0, 1);
planimeter(&g, pc, 3, &perimeter, &area);
- result += assertEquals(perimeter, 36026861, 1);
- result += assertEquals(area, 0, 1);
+ result += checkEquals(perimeter, 36026861, 1);
+ result += checkEquals(area, 0, 1);
planimeter(&g, pd, 3, &perimeter, &area);
- result += assertEquals(perimeter, 36026861, 1);
- result += assertEquals(area, 0, 1);
+ result += checkEquals(perimeter, 36026861, 1);
+ result += checkEquals(area, 0, 1);
return result;
}
@@ -813,8 +820,8 @@ static int Planimeter12() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
planimeter(&g, points, 2, &perimeter, &area);
- result += assertEquals(perimeter, 10465729, 1);
- result += assertEquals(area, 0, 1);
+ result += checkEquals(perimeter, 10465729, 1);
+ result += checkEquals(area, 0, 1);
return result;
}
@@ -827,8 +834,8 @@ static int Planimeter13() {
int result = 0;
geod_init(&g, wgs84_a, wgs84_f);
planimeter(&g, points, 6, &perimeter, &area);
- result += assertEquals(perimeter, 1160741, 1);
- result += assertEquals(area, 32415230256.0, 1);
+ result += checkEquals(perimeter, 1160741, 1);
+ result += checkEquals(area, 32415230256.0, 1);
return result;
}
@@ -847,33 +854,33 @@ static int Planimeter15() {
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);
+ result += checkEquals(area, r, 0.5);
geod_polygon_testpoint(&g, &p, lat[2], lon[2], 0, 0, &area, 0);
- result += assertEquals(area, r, 0.5);
+ result += checkEquals(area, r, 0.5);
geod_polygon_testpoint(&g, &p, lat[2], lon[2], 1, 1, &area, 0);
- result += assertEquals(area, -r, 0.5);
+ result += checkEquals(area, -r, 0.5);
geod_polygon_testpoint(&g, &p, lat[2], lon[2], 1, 0, &area, 0);
- result += assertEquals(area, a0-r, 0.5);
+ result += checkEquals(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);
+ result += checkEquals(area, r, 0.5);
geod_polygon_testedge(&g, &p, azi1, s12, 0, 0, &area, 0);
- result += assertEquals(area, r, 0.5);
+ result += checkEquals(area, r, 0.5);
geod_polygon_testedge(&g, &p, azi1, s12, 1, 1, &area, 0);
- result += assertEquals(area, -r, 0.5);
+ result += checkEquals(area, -r, 0.5);
geod_polygon_testedge(&g, &p, azi1, s12, 1, 0, &area, 0);
- result += assertEquals(area, a0-r, 0.5);
+ result += checkEquals(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);
+ result += checkEquals(area, r, 0.5);
geod_polygon_compute(&g, &p, 0, 0, &area, 0);
- result += assertEquals(area, r, 0.5);
+ result += checkEquals(area, r, 0.5);
geod_polygon_compute(&g, &p, 1, 1, &area, 0);
- result += assertEquals(area, -r, 0.5);
+ result += checkEquals(area, -r, 0.5);
geod_polygon_compute(&g, &p, 1, 0, &area, 0);
- result += assertEquals(area, a0-r, 0.5);
+ result += checkEquals(area, a0-r, 0.5);
geod_polygonarea(&g, lat, lon, 3, &area, 0);
- result += assertEquals(area, r, 0.5);
+ result += checkEquals(area, r, 0.5);
return result;
}
@@ -893,8 +900,8 @@ static int Planimeter19() {
result += area == 0 ? 0 : 1;
result += perim == 0 ? 0 : 1;
geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, &area, &perim);
- result += area == area ? 1 : 0;
- result += perim == perim ? 1 : 0;
+ result += checkNaN(area);
+ result += checkNaN(perim);
geod_polygon_addpoint(&g, &p, 1, 1);
geod_polygon_compute(&g, &p, 0, 1, &area, &perim);
result += area == 0 ? 0 : 1;
@@ -905,7 +912,7 @@ static int Planimeter19() {
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 ? 1 : 0;
+ result += checkNaN(perim);
geod_polygon_addpoint(&g, &p, 1, 1);
geod_polygon_compute(&g, &p, 0, 1, 0, &perim);
result += perim == 0 ? 0 : 1;
@@ -938,30 +945,30 @@ static int Planimeter21() {
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);
+ if (i != 4) result += checkEquals(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);
+ if (i != 4) result += checkEquals(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);
+ if (i != 4) result += checkEquals(area, -i*r, 0.5);
geod_polygon_testpoint(&g, &p, lat, -60, 1, 0, &area, 0);
- result += assertEquals(area, -i*r + a0, 0.5);
+ result += checkEquals(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);
+ if (i != 4) result += checkEquals(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);
+ if (i != 4) result += checkEquals(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);
+ if (i != 4) result += checkEquals(area, -i*r, 0.5);
geod_polygon_testedge(&g, &p, a, s, 1, 0, &area, 0);
- result += assertEquals(area, -i*r + a0, 0.5);
+ result += checkEquals(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);
+ if (i != 4) result += checkEquals(area, i*r, 0.5);
geod_polygon_compute(&g, &p, 0, 0, &area, 0);
- if (i != 4) result += assertEquals(area, i*r, 0.5);
+ if (i != 4) result += checkEquals(area, i*r, 0.5);
geod_polygon_compute(&g, &p, 1, 1, &area, 0);
- if (i != 4) result += assertEquals(area, -i*r, 0.5);
+ if (i != 4) result += checkEquals(area, -i*r, 0.5);
geod_polygon_compute(&g, &p, 1, 0, &area, 0);
- result += assertEquals(area, -i*r + a0, 0.5);
+ result += checkEquals(area, -i*r + a0, 0.5);
}
return result;
}
@@ -979,7 +986,7 @@ static int AddEdge1() {
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);
+ result += checkEquals(area, 1000000.0, 0.01);
return result;
}
@@ -994,8 +1001,8 @@ static int EmptyPoly() {
result += area == 0 ? 0 : 1;
result += perim == 0 ? 0 : 1;
geod_polygon_testedge(&g, &p, 90, 1000, 0, 1, &area, &perim);
- result += area == area ? 1 : 0;
- result += perim == perim ? 1 : 0;
+ result += checkNaN(area);
+ result += checkNaN(perim);
geod_polygon_compute(&g, &p, 0, 1, &area, &perim);
result += area == 0 ? 0 : 1;
result += perim == 0 ? 0 : 1;
@@ -1003,14 +1010,14 @@ static int EmptyPoly() {
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 ? 1 : 0;
+ result += checkNaN(perim);
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);
+ result += checkEquals(perim, 1000, 1e-10);
geod_polygon_testpoint(&g, &p, 2, 2, 0, 1, 0, &perim);
- result += assertEquals(perim, 156876.149, 0.5e-3);
+ result += checkEquals(perim, 156876.149, 0.5e-3);
return result;
}
diff --git a/src/nad_intr.c b/src/nad_intr.c
index b385410f..dc245831 100644
--- a/src/nad_intr.c
+++ b/src/nad_intr.c
@@ -1,6 +1,8 @@
/* Determine nad table correction value */
#define PJ_LIB__
+#include "proj_internal.h"
#include "projects.h"
+
LP
nad_intr(LP t, struct CTABLE *ct) {
LP val, frct;
@@ -10,8 +12,11 @@ nad_intr(LP t, struct CTABLE *ct) {
long index;
int in;
- indx.lam = (int)floor(t.lam /= ct->del.lam);
- indx.phi = (int)floor(t.phi /= ct->del.phi);
+ t.lam /= ct->del.lam;
+ indx.lam = pj_is_nan(t.lam) ? 0 : (int)floor(t.lam);
+ t.phi /= ct->del.phi;
+ indx.phi = pj_is_nan(t.phi) ? 0 : (int)floor(t.phi);
+
frct.lam = t.lam - indx.lam;
frct.phi = t.phi - indx.phi;
val.lam = val.phi = HUGE_VAL;
diff --git a/src/pj_apply_vgridshift.c b/src/pj_apply_vgridshift.c
index 1b32c0f6..05803bc8 100644
--- a/src/pj_apply_vgridshift.c
+++ b/src/pj_apply_vgridshift.c
@@ -42,7 +42,7 @@ static double read_vgrid_value( PJ *defn, LP input, int *gridlist_count_p, PJ_GR
float *cvs;
/* do not deal with NaN coordinates */
/* cppcheck-suppress duplicateExpression */
- if( input.phi != input.phi || input.lam != input.lam )
+ if( pj_is_nan(input.phi) || pj_is_nan(input.lam) )
itable = *gridlist_count_p;
/* keep trying till we find a table that works */
diff --git a/src/pj_init.c b/src/pj_init.c
index 29368cbd..9b06ff28 100644
--- a/src/pj_init.c
+++ b/src/pj_init.c
@@ -126,7 +126,9 @@ static char *get_init_string (PJ_CONTEXT *ctx, char *name) {
*section = 0;
section++;
n = strlen (section);
- pj_log (ctx, 3, "get_init_string: searching for section [%s] in init file [%s]", section, fname);
+ pj_log (ctx, PJ_LOG_TRACE,
+ "get_init_string: searching for section [%s] in init file [%s]",
+ section, fname);
fid = pj_open_lib (ctx, fname, "rt");
if (0==fid) {
@@ -216,7 +218,7 @@ static char *get_init_string (PJ_CONTEXT *ctx, char *name) {
if (0==buffer)
return 0;
pj_shrink (buffer);
- pj_log (ctx, 3, "key=%s, value: [%s]", key, buffer);
+ pj_log (ctx, PJ_LOG_TRACE, "key=%s, value: [%s]", key, buffer);
return buffer;
}
@@ -236,7 +238,7 @@ Expand key from buffer or (if not in buffer) from init file
xkey = key;
else
xkey += 5;
- pj_log (ctx, 3, "get_init: searching cache for key: [%s]", xkey);
+ pj_log (ctx, PJ_LOG_TRACE, "get_init: searching cache for key: [%s]", xkey);
/* Is file/key pair already in cache? */
init_items = pj_search_initcache (xkey);
@@ -244,13 +246,17 @@ Expand key from buffer or (if not in buffer) from init file
return init_items;
/* If not, we must read it from file */
- pj_log (ctx, 3, "get_init: searching on in init files for [%s]", xkey);
+ pj_log (ctx, PJ_LOG_TRACE,
+ "get_init: searching on in init files for [%s]", xkey);
definition = get_init_string (ctx, xkey);
if (0==definition)
return 0;
init_items = string_to_paralist (ctx, definition);
if (init_items)
- pj_log (ctx, 3, "get_init: got [%s], paralist[0,1]: [%s,%s]", definition, init_items->param, init_items->next? init_items->next->param: "(empty)");
+ pj_log (ctx, PJ_LOG_TRACE, "get_init: got [%s], paralist[0,1]: [%s,%s]",
+ definition,
+ init_items->param,
+ init_items->next ? init_items->next->param : "(empty)");
pj_dealloc (definition);
if (0==init_items)
return 0;
diff --git a/src/pj_internal.c b/src/pj_internal.c
index 61905259..4da47051 100644
--- a/src/pj_internal.c
+++ b/src/pj_internal.c
@@ -443,3 +443,19 @@ void proj_log_func (PJ_CONTEXT *ctx, void *app_data, PJ_LOG_FUNCTION logf) {
if (0!=logf)
ctx->logger = logf;
}
+
+
+#if HAVE_C99_MATH
+/* proj_internal.h defines pj_is_nan as isnan */
+#else
+/*****************************************************************************/
+int pj_is_nan (double val) {
+/******************************************************************************
+ Returns 0 if not a NaN and non-zero if val is a NaN.
+
+ Provides an equivalent to isnan().
+******************************************************************************/
+ /* cppcheck-suppress duplicateExpression */
+ return val != val;
+}
+#endif
diff --git a/src/proj.h b/src/proj.h
index 0025f3ad..7bc9b10e 100644
--- a/src/proj.h
+++ b/src/proj.h
@@ -131,7 +131,7 @@ extern "C" {
/* The version numbers should be updated with every release! **/
#define PROJ_VERSION_MAJOR 5
-#define PROJ_VERSION_MINOR 0
+#define PROJ_VERSION_MINOR 1
#define PROJ_VERSION_PATCH 0
extern char const pj_release[]; /* global release id string */
diff --git a/src/proj_internal.h b/src/proj_internal.h
index 75893c33..3f6ccde0 100644
--- a/src/proj_internal.h
+++ b/src/proj_internal.h
@@ -50,6 +50,10 @@ extern "C" {
#define STATIC_ASSERT(COND) ((void)sizeof(char[(COND) ? 1 : -1]))
+#if !defined(HAVE_C99_MATH)
+#define HAVE_C99_MATH 0
+#endif
+
#ifndef PJ_TODEG
#define PJ_TODEG(rad) ((rad)*180.0/M_PI)
#endif
@@ -130,6 +134,12 @@ void proj_fileapi_set (PJ *P, void *fileapi);
const char * const *proj_get_searchpath(void);
int proj_get_path_count(void);
+#if HAVE_C99_MATH
+#define pj_is_nan isnan
+#else
+int pj_is_nan (double val);
+#endif
+
#ifdef __cplusplus
}
#endif