1 #include <ccan/dgraph/dgraph.h>
2 /* Include the C files directly. */
3 #include <ccan/dgraph/dgraph.c>
4 #include <ccan/tap/tap.h>
6 static bool count_nodes(struct dgraph_node *n, unsigned int *count)
12 static bool stop_traverse(struct dgraph_node *n, unsigned int *count)
21 struct dgraph_node n1, n2, n3;
22 unsigned int count = 0;
24 /* This is how many tests you plan to run */
27 dgraph_init_node(&n1);
28 ok1(dgraph_check(&n1, NULL) == &n1);
30 dgraph_traverse_from(&n1, count_nodes, &count);
33 dgraph_traverse_to(&n1, count_nodes, &count);
36 dgraph_init_node(&n2);
37 ok1(dgraph_check(&n2, NULL) == &n2);
38 dgraph_add_edge(&n1, &n2);
39 ok1(dgraph_check(&n1, NULL) == &n1);
40 ok1(dgraph_check(&n2, NULL) == &n2);
42 dgraph_traverse_from(&n1, count_nodes, &count);
45 dgraph_traverse_to(&n1, count_nodes, &count);
48 dgraph_traverse_from(&n2, count_nodes, &count);
51 dgraph_traverse_to(&n2, count_nodes, &count);
54 dgraph_init_node(&n3);
55 ok1(dgraph_check(&n3, NULL) == &n3);
56 dgraph_add_edge(&n2, &n3);
57 ok1(dgraph_check(&n1, NULL) == &n1);
58 ok1(dgraph_check(&n2, NULL) == &n2);
59 ok1(dgraph_check(&n3, NULL) == &n3);
61 dgraph_traverse_from(&n1, count_nodes, &count);
64 dgraph_traverse_to(&n1, count_nodes, &count);
67 dgraph_traverse_from(&n2, count_nodes, &count);
70 dgraph_traverse_to(&n2, count_nodes, &count);
73 dgraph_traverse_from(&n3, count_nodes, &count);
76 dgraph_traverse_to(&n3, count_nodes, &count);
79 /* Check stopping traverse. */
81 dgraph_traverse_from(&n1, stop_traverse, &count);
84 dgraph_traverse_from(&n1, stop_traverse, &count);
87 dgraph_traverse_from(&n1, stop_traverse, &count);
90 dgraph_clear_node(&n1);
91 ok1(dgraph_check(&n1, NULL) == &n1);
92 ok1(dgraph_check(&n2, NULL) == &n2);
93 ok1(dgraph_check(&n3, NULL) == &n3);
96 dgraph_traverse_from(&n2, count_nodes, &count);
99 dgraph_traverse_to(&n2, count_nodes, &count);
102 dgraph_traverse_from(&n3, count_nodes, &count);
105 dgraph_traverse_to(&n3, count_nodes, &count);
108 ok1(dgraph_del_edge(&n2, &n3));
110 dgraph_traverse_from(&n2, count_nodes, &count);
113 dgraph_traverse_to(&n2, count_nodes, &count);
116 dgraph_traverse_from(&n3, count_nodes, &count);
119 dgraph_traverse_to(&n3, count_nodes, &count);
121 ok1(dgraph_check(&n1, NULL) == &n1);
122 ok1(dgraph_check(&n2, NULL) == &n2);
123 ok1(dgraph_check(&n3, NULL) == &n3);
125 ok1(!dgraph_del_edge(&n2, &n3));
126 dgraph_clear_node(&n2);
128 ok1(dgraph_check(&n1, NULL) == &n1);
129 ok1(dgraph_check(&n2, NULL) == &n2);
130 ok1(dgraph_check(&n3, NULL) == &n3);
132 /* This exits depending on whether all tests passed */
133 return exit_status();