#include #include "hexagon.h" #include "ctap.h" void pcheck(struct HL_astar *p, int x1, int y1, int x2, int y2, int expect) { struct HL_hex from, to; int dist; from = HL_hex_xy(x1,y1); to = HL_hex_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(struct HL_hex hex, int dir, struct HL_hex *n) { int valid; struct HL_hex nh; valid = HL_adjhexp(hex, dir, &nh); if (valid && nh.x == 5 && nh.y == 5) { valid = 0; } if (valid && n) { *n = nh; } return valid; return 1; } int main(void) { struct HL_astar *p; plan(16); 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"); pcheck(p, 1,1, 1,3, 2); HL_astar_init(p); pcheck(p, 1,1, 2,1, 1); HL_astar_init(p); pcheck(p, 1,1, 2,2, 2); HL_astar_init(p); pcheck(p, 1,1, 3,1, 2); HL_astar_init(p); pcheck(p, 1,1, 4,7, 8); //HL_astar_clear(p); HL_astar_init(p); p->neighbor = neighbor55; pcheck(p,5,4,5,6,3); HL_astar_free(p); return 0; }