X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Faga%2Ftest%2Ftraversal1.c;fp=ccan%2Faga%2Ftest%2Ftraversal1.c;h=bce99ae31ff38a75e89084820fbda35aebd57882;hb=2192bdd98afbb1ddb489c863edd191877051de8b;hp=0000000000000000000000000000000000000000;hpb=3b7409ea08a7d1643bc7de31ece63e20b89f319b;p=ccan diff --git a/ccan/aga/test/traversal1.c b/ccan/aga/test/traversal1.c new file mode 100644 index 00000000..bce99ae3 --- /dev/null +++ b/ccan/aga/test/traversal1.c @@ -0,0 +1,121 @@ +#include "config.h" + +#include + +#include +#include + +#include + +#include "simple-graph.h" + +static ptrint_t *traversal1_first_edge(const struct aga_graph *g, + const struct aga_node *n) +{ + struct traversal1_graph *t1g = container_of(g, struct traversal1_graph, + sg.g); + int ni = n - t1g->sg.nodes; + + switch (ni) { + case 1: + case 2: + case 3: + + case 7: + case 8: + case 9: + return int2ptr(1); + + case 4: + case 5: + case 6: + return NULL; + + default: + assert(0); + } +} + +static ptrint_t *traversal1_next_edge(const struct aga_graph *g, + const struct aga_node *n, + ptrint_t *e) +{ + struct traversal1_graph *t1g = container_of(g, struct traversal1_graph, + sg.g); + int ni = n - t1g->sg.nodes; + int index = ptr2int(e); + + assert((ni < 4) || (ni > 6)); + if (index == 1) + return int2ptr(2); + else if (index == 2) + return NULL; + else + assert(0); +} + +static int traversal1_edge_info(const struct aga_graph *g, + const struct aga_node *n, + ptrint_t *e, struct aga_edge_info *ei) +{ + struct traversal1_graph *t1g = container_of(g, struct traversal1_graph, + sg.g); + int ni = n - t1g->sg.nodes; + int index = ptr2int(e); + + assert((index == 1) || (index == 2)); + + switch (ni) { + case 1: + if (index == 1) + ei->to = &t1g->sg.nodes[2]; + else + ei->to = &t1g->sg.nodes[3]; + break; + + case 2: + if (index == 1) + ei->to = &t1g->sg.nodes[4]; + else + ei->to = &t1g->sg.nodes[5]; + break; + case 3: + if (index == 1) + ei->to = &t1g->sg.nodes[5]; + else + ei->to = &t1g->sg.nodes[6]; + break; + + case 7: + if (index == 1) + ei->to = &t1g->sg.nodes[5]; + else + ei->to = &t1g->sg.nodes[4]; + break; + + case 8: + if (index == 1) + ei->to = &t1g->sg.nodes[6]; + else + ei->to = &t1g->sg.nodes[5]; + break; + + case 9: + if (index == 1) + ei->to = &t1g->sg.nodes[8]; + else + ei->to = &t1g->sg.nodes[7]; + break; + + default: + assert(0); + } + return 0; +} + +void traversal1_graph_init(struct traversal1_graph *t1g) +{ + simple_graph_init(&t1g->sg, traversal1_first_edge, + traversal1_next_edge, + traversal1_edge_info); +}