1 #define CCAN_DGRAPH_DEBUG 1
2 #include <ccan/dgraph/dgraph.h>
3 /* Include the C files directly. */
4 #include <ccan/dgraph/dgraph.c>
5 #include <ccan/tap/tap.h>
7 static bool count_nodes(struct dgraph_node *n, unsigned int *count)
13 static bool stop_traverse(struct dgraph_node *n, unsigned int *count)
22 struct dgraph_node n1, n2, n3;
23 unsigned int count = 0;
25 /* This is how many tests you plan to run */
28 dgraph_init_node(&n1);
29 ok1(dgraph_check(&n1, NULL) == &n1);
31 dgraph_traverse_from(&n1, count_nodes, &count);
34 dgraph_traverse_to(&n1, count_nodes, &count);
37 dgraph_init_node(&n2);
38 ok1(dgraph_check(&n2, NULL) == &n2);
39 dgraph_add_edge(&n1, &n2);
40 ok1(dgraph_check(&n1, NULL) == &n1);
41 ok1(dgraph_check(&n2, NULL) == &n2);
43 dgraph_traverse_from(&n1, count_nodes, &count);
46 dgraph_traverse_to(&n1, count_nodes, &count);
49 dgraph_traverse_from(&n2, count_nodes, &count);
52 dgraph_traverse_to(&n2, count_nodes, &count);
55 dgraph_init_node(&n3);
56 ok1(dgraph_check(&n3, NULL) == &n3);
57 dgraph_add_edge(&n2, &n3);
58 ok1(dgraph_check(&n1, NULL) == &n1);
59 ok1(dgraph_check(&n2, NULL) == &n2);
60 ok1(dgraph_check(&n3, NULL) == &n3);
62 dgraph_traverse_from(&n1, count_nodes, &count);
65 dgraph_traverse_to(&n1, count_nodes, &count);
68 dgraph_traverse_from(&n2, count_nodes, &count);
71 dgraph_traverse_to(&n2, count_nodes, &count);
74 dgraph_traverse_from(&n3, count_nodes, &count);
77 dgraph_traverse_to(&n3, count_nodes, &count);
80 /* Check stopping traverse. */
82 dgraph_traverse_from(&n1, stop_traverse, &count);
85 dgraph_traverse_from(&n1, stop_traverse, &count);
88 dgraph_traverse_from(&n1, stop_traverse, &count);
91 dgraph_clear_node(&n1);
92 ok1(dgraph_check(&n1, NULL) == &n1);
93 ok1(dgraph_check(&n2, NULL) == &n2);
94 ok1(dgraph_check(&n3, NULL) == &n3);
97 dgraph_traverse_from(&n2, count_nodes, &count);
100 dgraph_traverse_to(&n2, count_nodes, &count);
103 dgraph_traverse_from(&n3, count_nodes, &count);
106 dgraph_traverse_to(&n3, count_nodes, &count);
109 ok1(dgraph_del_edge(&n2, &n3));
111 dgraph_traverse_from(&n2, count_nodes, &count);
114 dgraph_traverse_to(&n2, count_nodes, &count);
117 dgraph_traverse_from(&n3, count_nodes, &count);
120 dgraph_traverse_to(&n3, count_nodes, &count);
122 ok1(dgraph_check(&n1, NULL) == &n1);
123 ok1(dgraph_check(&n2, NULL) == &n2);
124 ok1(dgraph_check(&n3, NULL) == &n3);
126 ok1(!dgraph_del_edge(&n2, &n3));
127 dgraph_clear_node(&n2);
129 ok1(dgraph_check(&n1, NULL) == &n1);
130 ok1(dgraph_check(&n2, NULL) == &n2);
131 ok1(dgraph_check(&n3, NULL) == &n3);
133 /* This exits depending on whether all tests passed */
134 return exit_status();