Index: alien_formats/easyeda/arc_testbench/tester.c =================================================================== --- alien_formats/easyeda/arc_testbench/tester.c (revision 39205) +++ alien_formats/easyeda/arc_testbench/tester.c (revision 39206) @@ -4,6 +4,32 @@ #define DEG2RAD (M_PI/180) +static double ang_normalize(double a) +{ + if ((a < 2*M_PI) || (a > 2*M_PI)) + a = fmod(a, 2*M_PI); + if (a < 0) + a += 2*M_PI; + return a; +} + +static int coord_neq(double a, double b) +{ + double diff = a - b; + return (diff > 0.001) || (diff < -0.001); +} + +static int ang_neq(double a, double b) +{ + double diff = a - b; + if ((diff > 0.001) || (diff < -0.001)) { + a = ang_normalize(a); + b = ang_normalize(b); + diff = a - b; + } + return (diff > 0.001) || (diff < -0.001); +} + int main(int argc, char *argv[]) { double cx, cy, r, sad, dad; @@ -25,7 +51,15 @@ res = arc_start_end_delta(sx, sy, ex, ey, dad, &ocx, &ocy, &or, &osrad, &oerad); - printf("res=%d center: %.3f;%.3f -> %.3f;%.3f rad: %.3f -> %.3f\n angs: %.5f;%.5f -> %.5f;%.5f\n", res, cx, cy, ocx, ocy, r, or, isa, iea, osrad, oerad); + printf("res=%d\n center: %.3f;%.3f -> %.3f;%.3f rad: %.3f -> %.3f\n angs: %.5f;%.5f -> %.5f;%.5f\n", res, cx, cy, ocx, ocy, r, or, isa, iea, osrad, oerad); + if (res != 0) + printf(" -> BAD result\n"); + else if (coord_neq(cx, ocx) || coord_neq(cy, ocy) || coord_neq(r, or)) + printf(" -> BAD output coords\n"); + else if (ang_neq(isa, osrad) || ang_neq(iea, oerad)) + printf(" -> BAD angles\n"); + else + printf(" -> OK\n"); } return 0;