]> git.ozlabs.org Git - ccan/blob - ccan/ungraph/test/run.c
ungraph: new module
[ccan] / ccan / ungraph / test / run.c
1 #include <ccan/ungraph/ungraph.h>
2 /* Include the C files directly. */
3 #include <ccan/ungraph/ungraph.c>
4 #include <ccan/tap/tap.h>
5 #include <assert.h>
6
7 static void *add_node(const tal_t *ctx,
8                       const char *name,
9                       const char **errstr,
10                       char **out)
11 {
12         tal_append_fmt(out, "add_node %s\n", (char *)name);
13         return (void *)tal_steal(ctx, name);
14 }
15
16 static const char *add_edge(const tal_t *ctx,
17                             void *source_node,
18                             void *dest_node,
19                             bool bidir,
20                             const char **labels,
21                             char **out)
22 {
23         tal_append_fmt(out, "add_edge %s-%s bidir=%i\n",
24                        (char *)source_node,
25                        (char *)dest_node,
26                        bidir);
27         for (size_t i = 0; i < tal_count(labels); i++)
28                 tal_append_fmt(out, "- label %s\n", labels[i]);
29         return NULL;
30 }
31
32 int main(void)
33 {
34         const tal_t *ctx = tal(NULL, char);
35         char *out = tal_arrz(ctx, char, 1);
36         /* This is how many tests you plan to run */
37         plan_tests(16);
38
39         ok1(ungraph(ctx,
40                     "AAA----->BBB",
41                     add_node, add_edge, &out) == NULL);
42         ok1(strcmp(out,
43                    "add_node AAA\n"
44                    "add_node BBB\n"
45                    "add_edge AAA-BBB bidir=0\n") == 0);
46         
47         out = tal_arrz(ctx, char, 1);
48         ok1(ungraph(ctx,
49                     "AAA<------BBB",
50                     add_node, add_edge, &out) == NULL);
51         ok1(strcmp(out,
52                    "add_node AAA\n"
53                    "add_node BBB\n"
54                    "add_edge BBB-AAA bidir=0\n") == 0);
55         
56         out = tal_arrz(ctx, char, 1);
57         ok1(ungraph(ctx,
58                     "AAA------BBB",
59                     add_node, add_edge, &out) == NULL);
60         ok1(strcmp(out,
61                    "add_node AAA\n"
62                    "add_node BBB\n"
63                    "add_edge AAA-BBB bidir=1\n") == 0);
64
65         out = tal_arrz(ctx, char, 1);
66         ok1(ungraph(ctx,
67                     "AAA<------>BBB",
68                     add_node, add_edge, &out) == NULL);
69         ok1(strcmp(out,
70                    "add_node AAA\n"
71                    "add_node BBB\n"
72                    "add_edge AAA-BBB bidir=1\n") == 0);
73
74         out = tal_arrz(ctx, char, 1);
75         ok1(ungraph(ctx,
76                     "AAA\n"
77                     " ^ \n"
78                     " | \n"
79                     " | \n"
80                     " v \n"
81                     "BBB",
82                     add_node, add_edge, &out) == NULL);
83         ok1(strcmp(out,
84                    "add_node AAA\n"
85                    "add_node BBB\n"
86                    "add_edge AAA-BBB bidir=1\n") == 0);
87         
88         out = tal_arrz(ctx, char, 1);
89         ok1(ungraph(ctx,
90                     "AAA\n"
91                     " / \n"
92                     "| \n"
93                     " \\ \n"
94                     "  v \n"
95                     "  BBB\n",
96                     add_node, add_edge, &out) == NULL);
97         ok1(strcmp(out,
98                    "add_node AAA\n"
99                    "add_node BBB\n"
100                    "add_edge AAA-BBB bidir=0\n") == 0);
101         
102         out = tal_arrz(ctx, char, 1);
103         ok1(ungraph(ctx,
104                     "AAA\n"
105                     " / \n"
106                     "|xyx \n"
107                     " \\ \n"
108                     "  v \n"
109                     "  BBB",
110                     add_node, add_edge, &out) == NULL);
111         ok1(strcmp(out,
112                    "add_node AAA\n"
113                    "add_node BBB\n"
114                    "add_edge AAA-BBB bidir=0\n"
115                    "- label xyx\n") == 0);
116
117         out = tal_arrz(ctx, char, 1);
118         ok1(ungraph(ctx,
119                     " AAA \n"
120                     "  |   \n"
121                     "A-+----B \n"
122                     "  | LABEL  \n"
123                     "  |  xyz\n"
124                     "  v  \n"
125                     " BBB",
126                     add_node, add_edge, &out) == NULL);
127         ok1(strcmp(out,
128                    "add_node AAA\n"
129                    "add_node BBB\n"
130                    "add_node A\n"
131                    "add_node B\n"
132                    "add_edge AAA-BBB bidir=0\n"
133                    "add_edge A-B bidir=1\n"
134                    "- label LABEL\n"
135                    "- label xyz\n") == 0);
136
137         tal_free(ctx);
138         /* This exits depending on whether all tests passed */
139         return exit_status();
140 }