123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282 |
- #include "../gpsd_config.h"
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include "../gpsdclient.h"
- #include "../revision.h"
- struct test {
- double deg;
- char dd[20];
- char dd2[20];
- char ddmm[20];
- char ddmm2[20];
- char ddmmss[20];
- char ddmmss2[20];
- };
- #define NANFLAG 9999
- struct test tests[] = {
-
- {(1.999999995),
- " 2.00000000",
- " 2.00000000 E",
- " 2 00.000000'",
- " 2 00.000000' E",
- " 1 59' 59.99998\"",
- " 1 59' 59.99998\" N"},
-
- {(3.999999994),
- " 3.99999999",
- " 3.99999999 E",
- " 4 00.000000'",
- " 4 00.000000' E",
- " 3 59' 59.99998\"",
- " 3 59' 59.99998\" N"},
-
- {(5.0 + 1.999999600/60.0),
- " 5.03333333",
- " 5.03333333 E",
- " 5 02.000000'",
- " 5 02.000000' E",
- " 5 01' 59.99998\"",
- " 5 01' 59.99998\" N"},
-
- {(6.0 + 1.999999400/60.0),
- " 6.03333332",
- " 6.03333332 E",
- " 6 01.999999'",
- " 6 01.999999' E",
- " 6 01' 59.99996\"",
- " 6 01' 59.99996\" N"},
-
- {(7.0 + 59.999999600/60.0),
- " 7.99999999",
- " 7.99999999 E",
- " 8 00.000000'",
- " 8 00.000000' E",
- " 7 59' 59.99998\"",
- " 7 59' 59.99998\" N"},
-
- {(9.0 + 59.999999400/60.0),
- " 9.99999999",
- " 9.99999999 E",
- " 9 59.999999'",
- " 9 59.999999' E",
- " 9 59' 59.99996\"",
- " 9 59' 59.99996\" N"},
-
- {(11.0 + 1.0/60.0 + 1.99999600/3600.0),
- " 11.01722222",
- " 11.01722222 E",
- " 11 01.033333'",
- " 11 01.033333' E",
- " 11 01' 02.00000\"",
- " 11 01' 02.00000\" N"},
-
- {(12.0 + 2.0/60.0 + 2.99999400/3600.0),
- " 12.03416667",
- " 12.03416667 E",
- " 12 02.050000'",
- " 12 02.050000' E",
- " 12 02' 02.99999\"",
- " 12 02' 02.99999\" N"},
-
- {-13.00000001,
- " 13.00000001",
- " 13.00000001 W",
- " 13 00.000001'",
- " 13 00.000001' W",
- " 13 00' 00.00004\"",
- " 13 00' 00.00004\" S"},
-
- {(14.0 + 0.000001/60.0),
- " 14.00000002",
- " 14.00000002 E",
- " 14 00.000001'",
- " 14 00.000001' E",
- " 14 00' 00.00006\"",
- " 14 00' 00.00006\" N"},
-
- {(15.0 + 2.0/60.0 + 2.00001/3600.0),
- " 15.03388889",
- " 15.03388889 E",
- " 15 02.033334'",
- " 15 02.033334' E",
- " 15 02' 02.00001\"",
- " 15 02' 02.00001\" N"},
-
-
- {-44.0,
- " 44.00000000",
- " 44.00000000 W",
- " 44 00.000000'",
- " 44 00.000000' W",
- " 44 00' 00.00000\"",
- " 44 00' 00.00000\" S"},
-
- {359.99999999999,
- " 0.00000000",
- " 0.00000000 E",
- " 0 00.000000'",
- " 0 00.000000' E",
- " 0 00' 00.00000\"",
- " 0 00' 00.00000\" N"},
-
-
- {361,
- "n/a",
- "n/a",
- "n/a",
- "n/a",
- "n/a",
- "n/a"},
-
-
- {NANFLAG,
- "n/a",
- "n/a",
- "n/a",
- "n/a",
- "n/a",
- "n/a"},
-
-
- {9999,
- "n/a",
- "n/a",
- "n/a",
- "n/a",
- "n/a",
- "n/a"},
- };
- struct test2 {
- double lat;
- double lon;
- char *maidenhead;
- char *name;
- };
- struct test2 tests2[] = {
-
- {48.86471, 2.37305, "JN18eu", "Paris"},
- {41.93498, 12.43652, "JN61fw", "Rome"},
- {39.9771, -75.1685, "FM29jx", "Philadelphia"},
- {-23.4028, -50.9766, "GG46mo", "Sao Paulo"},
- {90, 180, "RR99xx", "North Pole"},
- {-90, -180, "AA00aa", "South Pole"},
- };
- int main(int argc, char **argv)
- {
- char buf[20];
- char *s;
- unsigned int i;
- int verbose = 0;
- int fail_count = 0;
- int option;
- while ((option = getopt(argc, argv, "h?vV")) != -1) {
- switch (option) {
- default:
- fail_count = 1;
-
- case '?':
-
- case 'h':
- (void)fputs("usage: test_gpsdclient [-v] [-V]\n", stderr);
- exit(fail_count);
- case 'V':
- (void)fprintf( stderr, "test_gpsdclient %s\n",
- VERSION);
- exit(EXIT_SUCCESS);
- case 'v':
- verbose = 1;
- break;
- }
- }
- for (i = 0; i < (sizeof(tests)/sizeof(struct test)); i++) {
- if (NANFLAG == tests[i].deg) {
-
- tests[i].deg = nan("a");
- }
- s = deg_to_str(deg_dd, tests[i].deg);
- if (0 != strcmp(s, tests[i].dd)) {
- printf("ERROR: %s s/b %s\n", s, tests[i].dd);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests[i].dd);
- }
- s = deg_to_str2(deg_dd, tests[i].deg, buf,
- sizeof(buf), " E", " W");
- if (0 != strcmp(s, tests[i].dd2)) {
- printf("ERROR: %s s/b %s\n", s, tests[i].dd2);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests[i].dd2);
- }
- s = deg_to_str(deg_ddmm, tests[i].deg);
- if (0 != strcmp(s, tests[i].ddmm)) {
- printf("ERROR: %s s/b %s\n", s, tests[i].ddmm);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests[i].ddmm);
- }
- s = deg_to_str2(deg_ddmm, tests[i].deg, buf,
- sizeof(buf), " E", " W");
- if (0 != strcmp(s, tests[i].ddmm2)) {
- printf("ERROR: %s s/b %s\n", s, tests[i].ddmm2);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests[i].ddmm2);
- }
- s = deg_to_str(deg_ddmmss, tests[i].deg);
- if (0 != strcmp(s, tests[i].ddmmss)) {
- printf("ERROR: %s s/b %s\n", s, tests[i].ddmmss);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests[i].ddmmss);
- }
- s = deg_to_str2(deg_ddmmss, tests[i].deg, buf,
- sizeof(buf), " N", " S");
- if (0 != strcmp(s, tests[i].ddmmss2)) {
- printf("ERROR: %s s/b %s\n", s, tests[i].ddmmss2);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests[i].ddmmss2);
- }
- }
- for (i = 0; i < (sizeof(tests2)/sizeof(struct test2)); i++) {
- s = maidenhead(tests2[i].lat, tests2[i].lon);
- if (0 != strcmp(s, tests2[i].maidenhead)) {
- printf("ERROR: %s s/b %s\n", s, tests2[i].maidenhead);
- fail_count++;
- } else if (0 < verbose) {
- printf("%s s/b %s\n", s, tests2[i].maidenhead);
- }
- }
- exit(fail_count);
- }
|