X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fagar%2Ftest%2Ftraversal1.c;fp=ccan%2Fagar%2Ftest%2Ftraversal1.c;h=0a465989f6f7e3a82ac291dd123f055475560214;hb=c2966d1879c825cfaf0e7d6848a5da052ee4a038;hp=0000000000000000000000000000000000000000;hpb=06162212353c882249d7e207756ea81ea645fc30;p=ccan diff --git a/ccan/agar/test/traversal1.c b/ccan/agar/test/traversal1.c new file mode 100644 index 00000000..0a465989 --- /dev/null +++ b/ccan/agar/test/traversal1.c @@ -0,0 +1,114 @@ +#include "config.h" + +#include + +#include +#include + +#include + +#include "simple-graphr.h" + +static const void *traversal1_first_edge_r(const struct agar_graph *gr, + const void *nr) +{ + int ni = ptr2int(nr); + + 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 const void *traversal1_next_edge_r(const struct agar_graph *gr, + const void *nr, const void *e) +{ + int ni = ptr2int(nr); + 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_r(const struct agar_graph *gr, + const void *nr, const void *e, + struct agar_edge_info *eir) +{ + int ni = ptr2int(nr); + int index = ptr2int(e); + + assert((index == 1) || (index == 2)); + + switch (ni) { + case 1: + if (index == 1) + eir->to = int2ptr(2); + else + eir->to = int2ptr(3); + break; + + case 2: + if (index == 1) + eir->to = int2ptr(4); + else + eir->to = int2ptr(5); + break; + case 3: + if (index == 1) + eir->to = int2ptr(5); + else + eir->to = int2ptr(6); + break; + + case 7: + if (index == 1) + eir->to = int2ptr(5); + else + eir->to = int2ptr(4); + break; + + case 8: + if (index == 1) + eir->to = int2ptr(6); + else + eir->to = int2ptr(5); + break; + + case 9: + if (index == 1) + eir->to = int2ptr(8); + else + eir->to = int2ptr(7); + break; + + default: + assert(0); + } + return 0; +} + +void traversal1_graphr_init(struct traversal1_graphr *t1gr) +{ + agar_init_graph(&t1gr->gr, + traversal1_first_edge_r, traversal1_next_edge_r, + traversal1_edge_info_r); +}