X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fstrset%2Ftest%2Frun-prefix.c;fp=ccan%2Fstrset%2Ftest%2Frun-prefix.c;h=87ce98fa5b7a31a1104587c2dae4b2455669bac5;hb=ab83de953730f5e5e571dbf69ffb3cc685a102dc;hp=0000000000000000000000000000000000000000;hpb=0845e79650c9257aa0ddef8ff99fd815b5edffac;p=ccan diff --git a/ccan/strset/test/run-prefix.c b/ccan/strset/test/run-prefix.c new file mode 100644 index 00000000..87ce98fa --- /dev/null +++ b/ccan/strset/test/run-prefix.c @@ -0,0 +1,87 @@ +#include +#include +#include +#include + +/* Must be > 100, see below. */ +#define NUM 200 + +static bool in_order(const char *value, unsigned int *count) +{ + int i = atoi(value); + ok1(*count == i); + (*count)++; + return false; +} + +static bool find_empty(const char *value, char *empty) +{ + if (value == empty) + pass("Found empty entry!"); + return false; +} + +int main(void) +{ + struct strset set; + const struct strset *sub; + unsigned int i; + char *str[NUM], *empty; + + plan_tests(7 + 1 + 10 + 100); + strset_init(&set); + + for (i = 0; i < NUM; i++) { + char template[10]; + sprintf(template, "%08u", i); + str[i] = strdup(template); + } + + for (i = 0; i < NUM; i++) + strset_set(&set, str[i]); + + /* Nothing */ + sub = strset_prefix(&set, "a"); + ok1(strset_empty(sub)); + + /* Everything */ + sub = strset_prefix(&set, "0"); + ok1(sub->u.n == set.u.n); + sub = strset_prefix(&set, ""); + ok1(sub->u.n == set.u.n); + + /* Singleton. */ + sub = strset_prefix(&set, "00000000"); + i = 0; + strset_iterate(sub, in_order, &i); + ok1(i == 1); + + /* First 10. */ + sub = strset_prefix(&set, "0000000"); + i = 0; + strset_iterate(sub, in_order, &i); + ok1(i == 10); + + /* First 100. */ + sub = strset_prefix(&set, "000000"); + i = 0; + strset_iterate(sub, in_order, &i); + ok1(i == 100); + + /* Everything, *plus* empty string. */ + empty = strdup(""); + strset_set(&set, empty); + + sub = strset_prefix(&set, ""); + /* Check we get *our* empty string back! */ + strset_iterate(sub, find_empty, empty); + + strset_destroy(&set); + + for (i = 0; i < NUM; i++) + free(str[i]); + free(empty); + + /* This exits depending on whether all tests passed */ + return exit_status(); +}