]> pd.if.org Git - isea/blob - t/globehex.c
Initial checkin.
[isea] / t / globehex.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <math.h>
5
6 #include "tap.h"
7 #include "isea.h"
8
9 #include "testing.h"
10
11 #include "hexes.pt"
12
13 struct dgg {
14         int x, y;
15         char *data;
16 } dgg[] = {
17 {0, 0, "vertex 1"},
18 {1, 0, "vertex 2 r4 1 0 0"},
19 {1, 1, "step 1 r4 1 0 1"},
20 {1, 2, "step 2 r4 1 0 2"},
21 {1, 3, "step 3 r4 1 0 3"},
22 {49, 6,  "triangle center 1 r4 1 3 6"},
23 {2, 0, "vertex 3"},
24 {2, 1, "step 3.1"},
25 {3, 0, "vertex 4"},
26 {4, 0, "vertex 5"},
27 {5, 0, "vertex 6"},
28 {6, 0, "vertex 7"},
29 {7, 0, "vertex 8"},
30 {8, 0, "vertex 9"},
31 {9, 0, "vertex 10"},
32 {10, 0, "vertex 11"},
33 {11, 0, "vertex 12"},
34 {0, 0, NULL}
35 };
36
37 struct dggap3 {
38         int x, y;
39         char *data;
40 } dggap3[] = {
41 {0, 0, "vertex 1"},
42 {1, 0, "vertex 2 r4 1 0 0"},
43 {1, 1, "step 1 r4 1 0 1"},
44 {1, 2, "step 2 r4 1 0 2"},
45 {1, 3, "step 3 r4 1 0 3"},
46 {49, 6,  "triangle center 1 r4 1 3 6"},
47 {6, 9, "vertex 3"},
48 {6, 9, "step 3.1"},
49 {9, 12, "vertex 4"},
50 {12, 15, "vertex 5"},
51 {15, 18, "vertex 6"},
52 {9, 3, "vertex 7"},
53 {12, 6, "vertex 8"},
54 {15, 9, "vertex 9"},
55 {18, 12, "vertex 10"},
56 {21, 15, "vertex 11"},
57 {15, 0, "vertex 12"},
58 {0, 0, NULL}
59 };
60
61 int main(void) {
62         int i, j;
63
64         struct isea_dgg g;
65         struct isea_pt xy;
66         struct isea_geo ll;
67
68         isea_grid_init(&g);
69         isea_orient_pole(&g);
70         g.output = ISEA_HEX;
71         g.radius = ISEA_SCALE;
72         g.aperture = 3;
73         g.resolution = 4;
74
75         i=0;
76         while (input[i].data) i++;
77
78         plan_tests(i * 2 * 1);
79
80         for (j=0; j<i; j++) {
81                 ll.lon = input[j].lon * M_PI / 180.0;
82                 ll.lat = input[j].lat * M_PI / 180.0;
83                 xy = isea_forward(&g, &ll);
84                 ok(xy.x == dgg[j].x, "hex X %d == %d (%f, %f %s)",
85                                 (int)xy.x, dgg[j].x,
86                                 input[j].lon, input[j].lat, input[j].data
87                   );
88                 ok(xy.y == dgg[j].y, "hex Y %d == %d", (int)xy.y, dgg[j].y);
89         }
90
91         if (0) {
92         g.resolution = 3;
93         for (j=0; j<i; j++) {
94                 if (j == 7 || j == 2 || j == 3) continue;
95                 ll.lon = input[j].lon * M_PI / 180.0;
96                 ll.lat = input[j].lat * M_PI / 180.0;
97                 xy = isea_forward(&g, &ll);
98                 skip_start(j == 7 || j == 2 || j == 3, 2, "skipping ap3 input %d as it falls on a hex side and is numerically unstable", j);
99                 ok(xy.x == dggap3[j].x, "hex ap3 X %d == %d (%f, %f %s)",
100                                 (int)xy.x, dggap3[j].x,
101                                 input[j].lon, input[j].lat, input[j].data
102                   );
103                 ok(xy.y == dggap3[j].y, "hex ap3 Y %d == %d", (int)xy.y,
104                                 dggap3[j].y);
105                 skip_end;
106         }
107         }
108
109         return exit_status();
110
111 }