aboutsummaryrefslogtreecommitdiffstats
path: root/libtellurian_end_point.c
diff options
context:
space:
mode:
Diffstat (limited to 'libtellurian_end_point.c')
-rw-r--r--libtellurian_end_point.c73
1 files changed, 72 insertions, 1 deletions
diff --git a/libtellurian_end_point.c b/libtellurian_end_point.c
index 57af198..df0046e 100644
--- a/libtellurian_end_point.c
+++ b/libtellurian_end_point.c
@@ -22,5 +22,76 @@ libtellurian_end_point(double latitude1, double longitude1, double azimuth1, dou
#else
-TODO_TEST
+
+
+# define PM LIBTELLURIAN_MERIDIONAL_CIRCUMFERENCE
+# define PE LIBTELLURIAN_EQUATORIAL_CIRCUMFERENCE
+
+static int
+check(double dlat, double dlon, double daz, double rlat, double rlon, double raz, double s)
+{
+ double lat1, lat2, lon1, lon2, az1, az2;
+ libtellurian_end_point_radians(rlat, rlon, raz, s, &lat1, &lon1, &az1);
+ lat1 *= 180 / M_PI;
+ lon1 *= 180 / M_PI;
+ az1 *= 180 / M_PI;
+ libtellurian_end_point(dlat, dlon, daz, s, &lat2, &lon2, &az2);
+ if (lat2 != lat1 || lon2 != lon1 || az2 != az1)
+ return 0;
+ libtellurian_end_point(dlat, dlon, daz, s, &lat2, NULL, NULL);
+ libtellurian_end_point(dlat, dlon, daz, s, NULL, &lon2, NULL);
+ libtellurian_end_point(dlat, dlon, daz, s, NULL, NULL, &az2);
+ if (lat2 != lat1 || lon2 != lon1 || az2 != az1)
+ return 0;
+ libtellurian_end_point(dlat, dlon, daz, s, NULL, &lon2, &az2);
+ if (lon2 != lon1 || az2 != az1)
+ return 0;
+ libtellurian_end_point(dlat, dlon, daz, s, &lat2, NULL, &az2);
+ if (lat2 != lat1 || az2 != az1)
+ return 0;
+ libtellurian_end_point(dlat, dlon, daz, s, &lat2, &lon2, NULL);
+ if (lat2 != lat1 || lon2 != lon1)
+ return 0;
+ libtellurian_end_point(dlat, dlon, daz, s, NULL, NULL, NULL);
+ return 1;
+}
+
+int
+main(void)
+{
+ ASSERT(check(0, 0, 0, 0, 0, 0, 0));
+ ASSERT(check(0, 0, 0, 0, 0, 0, PM / 4));
+ ASSERT(check(0, 0, 0, 0, 0, 0, PM / 2));
+ ASSERT(check(0, 0, 0, 0, 0, 0, PM));
+ ASSERT(check(0, 0, 0, 0, 0, 0, 2 * PM));
+ ASSERT(check(0, 0, 0, 0, 0, 0, 3 * PM / 2));
+ ASSERT(check(0, 0, 90, 0, 0, D90, PE));
+ ASSERT(check(0, 0, 90, 0, 0, D90, PE / 8));
+ ASSERT(check(0, 0, 90, 0, 0, D90, PE / 4));
+ ASSERT(check(0, 0, 90, 0, 0, D90, PE / 2));
+
+ ASSERT(check(0, 0, 0, 0, 0, 0, 1000.0));
+ ASSERT(check(0, 0, 30, 0, 0, D30, 1000.0));
+ ASSERT(check(0, 0, 45, 0, 0, D45, 1000.0));
+ ASSERT(check(0, 0, 60, 0, 0, D60, 1000.0));
+ ASSERT(check(0, 0, 90, 0, 0, D90, 1000.0));
+ ASSERT(check(0, 0, 180, 0, 0, D180, 1000.0));
+
+ ASSERT(check(0, 30, 0, 0, D30, 0, 1000.0));
+ ASSERT(check(0, 45, 30, 0, D45, D30, 1000.0));
+ ASSERT(check(0, 60, 45, 0, D60, D45, 1000.0));
+ ASSERT(check(0, 90, 60, 0, D90, D60, 1000.0));
+ ASSERT(check(0, 180, 90, 0, D180, D90, 1000.0));
+ ASSERT(check(0, 45, 180, 0, D45, D180, 1000.0));
+
+ ASSERT(check(45, 30, 0, D45, D30, 0, 1000.0));
+ ASSERT(check(60, 45, 30, D60, D45, D30, 1000.0));
+ ASSERT(check(90, 60, 45, D90, D60, D45, 1000.0));
+ ASSERT(check(-45, 90, 60, -D45, D90, D60, 1000.0));
+ ASSERT(check(-60, 180, 90, -D60, D180, D90, 1000.0));
+ ASSERT(check(-90, 45, 180, -D90, D45, D180, 1000.0));
+ return 0;
+}
+
+
#endif