Example #1
0
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);
}
Example #2
0
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();
}
Example #3
0
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();
}