25static void utest_results_vec(
double p[3],
double q[3],
int ret_val,
26 double ref_p[3],
double ref_q[3],
33 if (ref_ret_value ==
error) {
36 PUT_ERR(
"error in ret_val (no error indicated)\n")
42 PUT_ERR(
"error in ret_val (identically circles)\n")
47 if (ret_val != ref_ret_value)
48 PUT_ERR(
"error in ret_val (a)");
60 if ((ret_val & mask_p) != (ref_ret_value & mask_p))
61 PUT_ERR(
"error in ret_val (b)\n")
66 if ((ret_val & mask_q) != (ref_ret_value & mask_q))
74 if ((ret_val & mask_p) << 1 != (ref_ret_value & mask_q))
80 if ((ret_val & mask_q) >> 1 != (ref_ret_value & mask_p))
84 if (ref_ret_value == 0 && ret_val != 0)
90void utest_cxc_rad(
double lon_a,
double lat_a,
double lon_b,
double lat_b,
91 double lon_c,
double lat_c,
double lon_d,
double lat_d,
93 double lon_ref_p,
double lat_ref_p,
94 double lon_ref_q,
double lat_ref_q,
int ref_ret_val) {
96 double edges[2][2][3];
97 LLtoXYZ(lon_a, lat_a, edges[0][0]);
98 LLtoXYZ(lon_b, lat_b, edges[0][1]);
99 LLtoXYZ(lon_c, lat_c, edges[1][0]);
100 LLtoXYZ(lon_d, lat_d, edges[1][1]);
102 enum yac_edge_type edge_types[2] = {edge_type_a, edge_type_b};
105 LLtoXYZ(lon_ref_p, lat_ref_p, ref_pq[0]);
106 LLtoXYZ(lon_ref_q, lat_ref_q, ref_pq[1]);
108 int ref_ret_vals[2] =
111 (ref_ret_val & (~(1+2+4+8))) |
122 for (
int i = 0;
i < 2; ++
i) {
124 for (
int j = 0; j < 2; ++j) {
126 for (
int k = 0; k < 2; ++k) {
131 edge_types[i], edges[i][j], edges[i][j^1],
132 edge_types[i^1], edges[i^1][k], edges[i^1][k^1],
135 p, q, ret_val, ref_pq[i], ref_pq[i^1], ref_ret_vals[i]);
141void utest_cxc(
double lon_a,
double lat_a,
double lon_b,
double lat_b,
142 double lon_c,
double lat_c,
double lon_d,
double lat_d,
144 double lon_ref_p,
double lat_ref_p,
145 double lon_ref_q,
double lat_ref_q,
int ref_ret_val) {
153static double utest_adjust_lon(
double lon,
double ref) {
154 while (lon < ref - 180) lon += 360;
155 while (lon > ref + 180) lon -= 360;
159void utest_get_edge_middle_point(
161 double lon_a,
double lat_a,
double lon_b,
double lat_b,
162 double * lon_middle,
double * lat_middle) {
178 middle[0] = a[0] + b[0];
179 middle[1] = a[1] + b[1];
180 middle[2] = a[2] + b[2];
184 XYZtoLL(middle, lon_middle, lat_middle);
190 *lon_middle = (lon_a + utest_adjust_lon(lon_b, lon_a))*0.5;
#define YAC_ASSERT(exp, msg)
static int points_are_identically(double const *a, double const *b)
static void LLtoXYZ_deg(double lon, double lat, double p_out[])
int yac_intersect_vec(enum yac_edge_type edge_type_a, double const a[3], double const b[3], enum yac_edge_type edge_type_b, double const c[3], double const d[3], double p[3], double q[3])
static void normalise_vector(double v[])
@ YAC_GREAT_CIRCLE_EDGE
great circle
@ YAC_LAT_CIRCLE_EDGE
latitude circle
@ YAC_LON_CIRCLE_EDGE
longitude circle
static void XYZtoLL(double const p_in[], double *lon, double *lat)
double(* p)(double lon, double lat)
static void LLtoXYZ(double lon, double lat, double p_out[])