5 #include <CUnit/CUnit.h>
9 #include "test_tsort.h"
20 GList
*get_test_list(void)
24 list
= g_list_prepend(list
, A
);
25 list
= g_list_prepend(list
, B
);
26 list
= g_list_prepend(list
, C
);
27 list
= g_list_prepend(list
, D
);
28 list
= g_list_prepend(list
, E
);
29 list
= g_list_prepend(list
, F
);
30 list
= g_list_prepend(list
, G
);
31 list
= g_list_prepend(list
, H
);
36 GList
*get_test_edges(void)
48 edges
= g_list_append(edges
, make_edge(A
, B
));
49 edges
= g_list_append(edges
, make_edge(A
, C
));
50 edges
= g_list_append(edges
, make_edge(A
, D
));
51 edges
= g_list_append(edges
, make_edge(B
, E
));
52 edges
= g_list_append(edges
, make_edge(G
, H
));
57 GList
*get_faulty_test_edges(void)
75 edges
= g_list_append(edges
, make_edge(A
, B
));
76 edges
= g_list_append(edges
, make_edge(A
, C
));
77 edges
= g_list_append(edges
, make_edge(A
, D
));
78 edges
= g_list_append(edges
, make_edge(B
, E
));
79 edges
= g_list_append(edges
, make_edge(E
, F
));
80 edges
= g_list_append(edges
, make_edge(F
, A
));
81 edges
= g_list_append(edges
, make_edge(G
, H
));
86 void test_tsort_succeed(void)
88 GList
*list
= get_test_list();
89 GList
*edges
= get_test_edges();
90 GList
*sorted_list
= tsort(list
, &edges
);
92 CU_ASSERT_PTR_NULL(edges
);
94 CU_ASSERT_PTR_NOT_NULL(sorted_list
);
96 CU_ASSERT_EQUAL(g_list_length(list
), g_list_length(sorted_list
));
98 /* Check that all items from the original list are in the sorted list. */
99 for (GList
*item
= list
; item
!= NULL
; item
= g_list_next(item
))
100 CU_ASSERT_PTR_NOT_NULL(g_list_find(sorted_list
, item
->data
));
102 /* Check that all items are in the order that is given by the edges. */
103 edges
= get_test_edges();
105 while (edges
!= NULL
) {
106 struct edge
*e
= edges
->data
;
107 CU_ASSERT(g_list_index(sorted_list
, e
->predecessor
) < g_list_index(sorted_list
, e
->successor
));
109 edges
= g_list_delete_link(edges
, edges
);
112 g_list_free(sorted_list
);
116 void test_tsort_fail(void)
118 GList
*list
= get_test_list();
119 GList
*edges
= get_faulty_test_edges();
120 GList
*sorted_list
= tsort(list
, &edges
);
122 CU_ASSERT_PTR_NULL(sorted_list
);
124 CU_ASSERT(edges
!= NULL
);
126 while (edges
!= NULL
) {
128 edges
= g_list_delete_link(edges
, edges
);
134 CU_TestInfo tsort_tests
[] = {
135 { "test_tsort_succeed", test_tsort_succeed
},
136 { "test_tsort_fail", test_tsort_fail
},