#include #include "hexagon.h" #include "tap.h" void pcheck(struct HL_astar *p, int x1, int y1, int x2, int y2, int expect) { int from, to, dist; from = HL_cantor_xy(x1,y1); to = HL_cantor_xy(x2,y2); HL_astar_clear(p); p->start = from; p->goal = to; dist = HL_findpath(p,0); ok(p->error == 0, "found path from (%02d, %02d) to (%02d, %02d) with no error", x1, y1, x2, y2); ok(dist == expect, "found path from (%02d, %02d) to (%02d, %02d) path length = %d (expect %d)", x1, y1, x2, y2, dist, expect); } /* make hex 55 missing */ int neighbor55(int hex, int dir) { int neighbor; do { neighbor = HL_adjacent_hex(hex, dir++); } while (neighbor == HL_cantor_xy(5,5)); return neighbor; } int main(void) { struct HL_astar *p; int length; plan_tests(17); p = HL_astar_init(0); ok(p != NULL, "allocated astar struct"); ok(p->malloced == 1, "allocated astar sets malloced"); ok(p->open == NULL, "initial open list empty"); ok(p->closed == NULL, "initial closed list empty"); p->start = HL_cantor_xy(1, 1); p->goal = HL_cantor_xy(1, 2); length = HL_findpath(p, 0); ok(p->error == 0, "path finding returns no error"); pcheck(p, 1,1, 1,3, 2); pcheck(p, 1,1, 2,1, 1); pcheck(p, 1,1, 2,2, 2); pcheck(p, 1,1, 3,1, 2); pcheck(p, 1,1, 4,7, 8); HL_astar_clear(p); p->neighbor = neighbor55; pcheck(p,5,4,5,6,3); HL_astar_free(p); return exit_status(); }