static void test_parallel(void) { struct parallel_graphr pgr; struct agar_state *sr; aga_icost_t cost; const void *node, *edge; parallel_graphr_init(&pgr, 3, 0); ok1(sr = agar_dijkstra_new(NULL, &pgr.gr, int2ptr(1))); ok1(agar_dijkstra_step(sr, &node)); ok1(ptr2int(node) == 1); ok1(agar_dijkstra_step(sr, &node)); ok1(ptr2int(node) == 2); ok1(!agar_dijkstra_step(sr, &node)); ok1(agar_dijkstra_path(sr, int2ptr(1), &cost, NULL, NULL)); ok1(cost == 0); ok1(agar_dijkstra_path(sr, int2ptr(2), &cost, &node, NULL)); ok1(cost == 2); ok1(node == int2ptr(1)); tal_free(sr); ok1(sr = agar_dijkstra_new(NULL, &pgr.gr, int2ptr(2))); ok1(agar_dijkstra_step(sr, &node)); ok1(ptr2int(node) == 2); ok1(!agar_dijkstra_step(sr, &node)); ok1(agar_dijkstra_path(sr, int2ptr(2), &cost, NULL, NULL)); ok1(cost == 0); ok1(!agar_dijkstra_path(sr, int2ptr(1), NULL, NULL, NULL)); tal_free(sr); parallel_graphr_init(&pgr, 3, 2); ok1(sr = agar_dijkstra_new(NULL, &pgr.gr, int2ptr(1))); ok1(agar_dijkstra_path(sr, int2ptr(2), &cost, &node, &edge)); ok1(cost == 1); ok1(ptr2int(node) == 1); ok1(ptr2int(edge) == 2); tal_free(sr); }
int main(void) { struct parallel_graphr pgr; struct full_graphr fgr; struct chain_graphr cgr; struct grid_graphr ggr1, ggr2; plan_tests(1 + 5 + 30 + 22 + 21 + 33 + 6 + 6 + 6); test_adjacency("trivial", &trivial_graphr.gr, trivial_adjacencyr); parallel_graphr_init(&pgr, 3, 0); test_adjacency("parallel nlinks 3", &pgr.gr, parallel_adjacencyr_nlinks3); full_graphr_init(&fgr, 5); test_adjacency("full 5", &fgr.gr, full_adjacencyr_5); chain_graphr_init(&cgr, 8); test_adjacency("chain 8", &cgr.fgr.gr, chain_adjacencyr_8); grid_graphr_init(&ggr1, 3, 3, true, true, false, false); test_adjacency("grid 3x3 right-down", &ggr1.gr, grid_adjacencyr_3x3_rightdown); grid_graphr_init(&ggr2, 3, 3, true, true, true, true); test_adjacency("grid 3x3 all", &ggr2.gr, grid_adjacencyr_3x3_all); test_adjacency("error graph", &error_graphr.gr, error_adjacencyr); test_adjacency("shortcut1 graph", &shortcut1_graphr.gr, shortcut1_adjacencyr); test_adjacency("shortcut2 graph", &shortcut2_graphr.gr, shortcut2_adjacencyr); return exit_status(); }
int main(void) { struct parallel_graphr pgr; struct full_graphr fgr; struct chain_graphr cgr; struct grid_graphr ggr1, ggr2; struct agar_state *sr; const void *nr; plan_tests(2 * 13 + 12 + 10); test_bfs(&trivial_graphr.gr, 1, 1); parallel_graphr_init(&pgr, 3, 0); test_bfs(&pgr.gr, 1, 1, 2); full_graphr_init(&fgr, 5); test_bfs(&fgr.gr, 1, 1, 2, 3, 4, 5); test_bfs(&fgr.gr, 3, 3, 1, 2, 4, 5); chain_graphr_init(&cgr, 8); test_bfs(&cgr.fgr.gr, 1, 1, 2, 3, 4, 5, 6, 7, 8); test_bfs(&cgr.fgr.gr, 8, 8, 7, 6, 5, 4, 3, 2, 1); test_bfs(&cgr.fgr.gr, 5, 5, 4, 6, 3, 7, 2, 8, 1); grid_graphr_init(&ggr1, 3, 3, true, true, false, false); test_bfs(&ggr1.gr, 1, 1, 2, 4, 3, 5, 7, 6, 8, 9); test_bfs(&ggr1.gr, 5, 5, 6, 8, 9); test_bfs(&ggr1.gr, 9, 9); grid_graphr_init(&ggr2, 3, 3, true, true, true, true); test_bfs(&ggr2.gr, 1, 1, 2, 4, 3, 5, 7, 6, 8, 9); test_bfs(&ggr2.gr, 5, 5, 6, 8, 4, 2, 9, 3, 7, 1); test_bfs(&ggr2.gr, 9, 9, 8, 6, 7, 5, 3, 4, 2, 1); test_bfs(&error_graphr.gr, 1, 1, 2); ok((sr = agar_bfs_new(NULL, &error_graphr.gr)), "started error traversal"); ok1(agar_bfs_explore(sr, int2ptr(3), &nr)); ok(ptr2int(nr) == 3, "Expected node #3, actually #%ld", ptr2int(nr)); ok1(agar_bfs_explore(sr, nr, &nr)); ok(ptr2int(nr) == 4, "Expected node #4, actually #%ld", ptr2int(nr)); ok1(!agar_bfs_explore(sr, nr, &nr)); ok1(agar_error(sr) == -1); ok1(!agar_bfs_explore(sr, nr, &nr)); tal_free(sr); test_bfs(&error_graphr.gr, 1, 1, 2); test_bfs(&traversal1_graphr.gr, 1, 1, 2, 3, 4, 5, 6); test_bfs(&traversal1_graphr.gr, 9, 9, 8, 7, 6, 5, 4); ok1((sr = agar_bfs_new(NULL, &traversal1_graphr.gr))); test_bfs_partial(sr, 1, 1, 2, 3, 4, 5, 6); test_bfs_partial(sr, 9, 9, 8, 7); tal_free(sr); ok1((sr = agar_bfs_new(NULL, &traversal1_graphr.gr))); test_bfs_partial(sr, 9, 9, 8, 7, 6, 5, 4); test_bfs_partial(sr, 1, 1, 2, 3); tal_free(sr); return exit_status(); }