summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/tests/eina_graph_suite.c123
1 files changed, 82 insertions, 41 deletions
diff --git a/src/tests/eina_graph_suite.c b/src/tests/eina_graph_suite.c
index 14b21f8..becb066 100644
--- a/src/tests/eina_graph_suite.c
+++ b/src/tests/eina_graph_suite.c
@@ -24,16 +24,17 @@ _feed_simple_graph(Eina_Graph *g)
ck_assert(eina_graph_edge_add(g, 5, 3) == EINA_TRUE);
}
-START_TEST (test_eina_graph_simple_bfs)
+static void _bfs_tests(Eina_Bool directed,
+ unsigned int vertices[], unsigned int n)
{
+ Eina_Graph *g;
Eina_Graph_BFS *bfs;
Eina_List *path, *l;
void *data;
int i;
- unsigned int vsr[] = { 0, 5, 3 };
ck_assert(eina_graph_init() == 1);
- Eina_Graph *g = eina_graph_new(13, 2, EINA_FALSE);
+ g = eina_graph_new(13, 2, directed);
ck_assert(g != NULL);
_feed_simple_graph(g);
@@ -48,11 +49,11 @@ START_TEST (test_eina_graph_simple_bfs)
ck_assert(eina_graph_bfs_dist_to(bfs, 3) == 2);
path = eina_graph_bfs_path_to(bfs, 3);
ck_assert(path != NULL);
- ck_assert(eina_list_count(path) == (sizeof(vsr)/sizeof(*vsr)));
+ ck_assert(eina_list_count(path) == n);
i = 0;
EINA_LIST_FOREACH(path, l, data)
{
- ck_assert(vsr[i] == CAST_D(data));
+ ck_assert(vertices[i] == CAST_D(data));
i++;
}
eina_graph_bfs_free(bfs);
@@ -61,41 +62,37 @@ START_TEST (test_eina_graph_simple_bfs)
ck_assert(eina_graph_shutdown() == 0);
}
+
+START_TEST (test_eina_graph_simple_bfs)
+{
+ unsigned int vertices[] = { 0, 5, 3 };
+ _bfs_tests(EINA_FALSE, vertices, (sizeof(vertices)/sizeof(*vertices)));
+}
END_TEST
-START_TEST (test_eina_graph_simple_dfs)
+START_TEST (test_eina_graph_directed_bfs)
{
+ unsigned int vertices[] = { 0, 5, 3 };
+ _bfs_tests(EINA_TRUE, vertices, (sizeof(vertices)/sizeof(*vertices)));
+}
+END_TEST
+
+static void _dfs_tests(Eina_Bool r, Eina_Bool directed,
+ unsigned int vertices[], unsigned int n)
+{
+ Eina_Graph *g;
Eina_Graph_DFS *dfs;
Eina_List *path, *l;
void *data;
int i;
- unsigned int vsr[] = { 0, 5, 4, 3 };
- unsigned int vss[] = { 0, 6, 4, 5, 3 };
ck_assert(eina_graph_init() == 1);
- Eina_Graph *g = eina_graph_new(13, 2, EINA_FALSE);
+ g = eina_graph_new(13, 2, directed);
ck_assert(g != NULL);
_feed_simple_graph(g);
- dfs = eina_graph_dfs_new(g, 0, EINA_TRUE);
- ck_assert(eina_graph_dfs_source(dfs) == 0);
- ck_assert(eina_graph_dfs_has_path_to(dfs, 12) == EINA_FALSE);
- ck_assert(eina_graph_dfs_path_to(dfs, 12) == NULL);
- ck_assert(eina_graph_dfs_path_to(dfs, 15) == NULL);
- ck_assert(eina_graph_dfs_has_path_to(dfs, 3) == EINA_TRUE);
- path = eina_graph_dfs_path_to(dfs, 3);
- ck_assert(path != NULL);
- ck_assert(eina_list_count(path) == (sizeof(vsr)/sizeof(*vsr)));
- i = 0;
- EINA_LIST_FOREACH(path, l, data)
- {
- ck_assert(vsr[i] == CAST_D(data));
- i++;
- }
- eina_graph_dfs_free(dfs);
-
- dfs = eina_graph_dfs_new(g, 0, EINA_FALSE);
+ dfs = eina_graph_dfs_new(g, 0, r);
ck_assert(eina_graph_dfs_source(dfs) == 0);
ck_assert(eina_graph_dfs_has_path_to(dfs, 12) == EINA_FALSE);
ck_assert(eina_graph_dfs_path_to(dfs, 12) == NULL);
@@ -103,11 +100,11 @@ START_TEST (test_eina_graph_simple_dfs)
ck_assert(eina_graph_dfs_has_path_to(dfs, 3) == EINA_TRUE);
path = eina_graph_dfs_path_to(dfs, 3);
ck_assert(path != NULL);
- ck_assert(eina_list_count(path) == (sizeof(vss)/sizeof(*vss)));
+ ck_assert(eina_list_count(path) == n);
i = 0;
EINA_LIST_FOREACH(path, l, data)
{
- ck_assert(vss[i] == CAST_D(data));
+ ck_assert(vertices[i] == CAST_D(data));
i++;
}
eina_graph_dfs_free(dfs);
@@ -116,16 +113,34 @@ START_TEST (test_eina_graph_simple_dfs)
ck_assert(eina_graph_shutdown() == 0);
}
+
+START_TEST (test_eina_graph_simple_dfs)
+{
+ unsigned int v0[] = { 0, 5, 4, 3 };
+ unsigned int v1[] = { 0, 6, 4, 5, 3 };
+ _dfs_tests(EINA_TRUE, EINA_FALSE, v0, (sizeof(v0)/sizeof(*v0)));
+ _dfs_tests(EINA_FALSE, EINA_FALSE, v1, (sizeof(v1)/sizeof(*v1)));
+}
+END_TEST
+
+START_TEST (test_eina_graph_directed_dfs)
+{
+ unsigned int v0[] = { 0, 5, 4, 3 };
+ unsigned int v1[] = { 0, 6, 4, 3 };
+ _dfs_tests(EINA_TRUE, EINA_TRUE, v0, (sizeof(v0)/sizeof(*v0)));
+ _dfs_tests(EINA_FALSE, EINA_TRUE, v1, (sizeof(v1)/sizeof(*v1)));
+}
END_TEST
START_TEST (test_eina_graph_simple)
{
FILE *outf;
+ Eina_Graph *g;
ck_assert(eina_graph_init() == 1);
ck_assert(eina_graph_init() == 2);
- Eina_Graph *g = eina_graph_new(13, 2, EINA_FALSE);
+ g = eina_graph_new(13, 2, EINA_FALSE);
ck_assert(g != NULL);
_feed_simple_graph(g);
@@ -157,12 +172,25 @@ START_TEST (test_eina_graph_simple)
ck_assert(eina_graph_degree_avg(g) < 2.154);
ck_assert(eina_graph_self_loops(g) == 1);
- outf = fopen("/tmp/eina_graph.dot", "w");
+ outf = fopen("./eina_graph.dot", "w");
eina_graph_dot_write(g, outf);
fclose(outf);
eina_graph_free(g);
+ ck_assert(eina_graph_shutdown() == 1);
+ ck_assert(eina_graph_shutdown() == 0);
+}
+END_TEST
+
+START_TEST (test_eina_graph_directed)
+{
+ FILE *outf;
+ Eina_Graph *g;
+
+ ck_assert(eina_graph_init() == 1);
+ ck_assert(eina_graph_init() == 2);
+
g = eina_graph_new(13, 2, EINA_TRUE);
ck_assert(g != NULL);
@@ -195,7 +223,7 @@ START_TEST (test_eina_graph_simple)
ck_assert(eina_graph_degree_avg(g) < 2.154);
ck_assert(eina_graph_self_loops(g) == 1);
- outf = fopen("/tmp/eina_graph_directed.dot", "w");
+ outf = fopen("./eina_graph_directed.dot", "w");
eina_graph_dot_write(g, outf);
fclose(outf);
@@ -209,19 +237,32 @@ END_TEST
Suite *
eina_graph_suite (void)
{
+ TCase *tc;
Suite *s = suite_create ("Eina Graph");
- TCase *tc_simple = tcase_create ("Simple Graph");
- tcase_add_test (tc_simple, test_eina_graph_simple);
- suite_add_tcase (s, tc_simple);
+ tc = tcase_create ("Simple Graph");
+ tcase_add_test (tc, test_eina_graph_simple);
+ suite_add_tcase (s, tc);
+
+ tc = tcase_create ("Directed Graph");
+ tcase_add_test (tc, test_eina_graph_directed);
+ suite_add_tcase (s, tc);
+
+ tc = tcase_create ("Simple Graph DFS");
+ tcase_add_test (tc, test_eina_graph_simple_dfs);
+ suite_add_tcase (s, tc);
+
+ tc = tcase_create ("Directed Graph DFS");
+ tcase_add_test (tc, test_eina_graph_directed_dfs);
+ suite_add_tcase (s, tc);
- TCase *tc_simple_dfs = tcase_create ("Simple Graph DFS");
- tcase_add_test (tc_simple_dfs, test_eina_graph_simple_dfs);
- suite_add_tcase (s, tc_simple_dfs);
+ tc = tcase_create ("Simple Graph BFS");
+ tcase_add_test (tc, test_eina_graph_simple_bfs);
+ suite_add_tcase (s, tc);
- TCase *tc_simple_bfs = tcase_create ("Simple Graph BFS");
- tcase_add_test (tc_simple_bfs, test_eina_graph_simple_bfs);
- suite_add_tcase (s, tc_simple_bfs);
+ tc = tcase_create ("Directed Graph BFS");
+ tcase_add_test (tc, test_eina_graph_directed_bfs);
+ suite_add_tcase (s, tc);
return s;
}