X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fopt%2Ftest%2Frun-iter.c;h=66fd5db8b0ac8533842a9d03f1a68fd1e99ffe6b;hp=147470fffd6c276ff22a41a26ae728a98b577721;hb=5a5b9f8d3d187b15b9e7b427c7c3b2ac5ee7c6be;hpb=d89e5744f30b584ac4909ce1164af1289c41359b diff --git a/ccan/opt/test/run-iter.c b/ccan/opt/test/run-iter.c index 147470ff..66fd5db8 100644 --- a/ccan/opt/test/run-iter.c +++ b/ccan/opt/test/run-iter.c @@ -1,4 +1,3 @@ -#define _GNU_SOURCE #include #include #include @@ -7,70 +6,83 @@ #include "utils.h" #include #include +#include +#include + +static void reset_options(void) +{ + free(opt_table); + opt_table = NULL; + opt_count = opt_num_short = opt_num_short_arg = opt_num_long = 0; +} /* Test iterators. */ int main(int argc, char *argv[]) { - unsigned i, len; + unsigned j, i, len = 0; const char *p; - plan_tests(37); - opt_register_table(subtables, NULL); + plan_tests(37 * 2); + for (j = 0; j < 2; j ++) { + reset_options(); + /* Giving subtable a title makes an extra entry! */ + opt_register_table(subtables, j == 0 ? NULL : "subtable"); - p = first_lopt(&i, &len); - ok1(i == 0); - ok1(len == 3); - ok1(strncmp(p, "jjj", len) == 0); - p = next_lopt(p, &i, &len); - ok1(i == 0); - ok1(len == 3); - ok1(strncmp(p, "lll", len) == 0); - p = next_lopt(p, &i, &len); - ok1(i == 1); - ok1(len == 3); - ok1(strncmp(p, "mmm", len) == 0); - p = next_lopt(p, &i, &len); - ok1(i == 5); - ok1(len == 3); - ok1(strncmp(p, "ddd", len) == 0); - p = next_lopt(p, &i, &len); - ok1(i == 6); - ok1(len == 3); - ok1(strncmp(p, "eee", len) == 0); - p = next_lopt(p, &i, &len); - ok1(i == 7); - ok1(len == 3); - ok1(strncmp(p, "ggg", len) == 0); - p = next_lopt(p, &i, &len); - ok1(i == 8); - ok1(len == 3); - ok1(strncmp(p, "hhh", len) == 0); - p = next_lopt(p, &i, &len); - ok1(!p); + p = first_lopt(&i, &len); + ok1(i == j + 0); + ok1(len == 3); + ok1(strncmp(p, "jjj", len) == 0); + p = next_lopt(p, &i, &len); + ok1(i == j + 0); + ok1(len == 3); + ok1(strncmp(p, "lll", len) == 0); + p = next_lopt(p, &i, &len); + ok1(i == j + 1); + ok1(len == 3); + ok1(strncmp(p, "mmm", len) == 0); + p = next_lopt(p, &i, &len); + ok1(i == j + 5); + ok1(len == 3); + ok1(strncmp(p, "ddd", len) == 0); + p = next_lopt(p, &i, &len); + ok1(i == j + 6); + ok1(len == 3); + ok1(strncmp(p, "eee", len) == 0); + p = next_lopt(p, &i, &len); + ok1(i == j + 7); + ok1(len == 3); + ok1(strncmp(p, "ggg", len) == 0); + p = next_lopt(p, &i, &len); + ok1(i == j + 8); + ok1(len == 3); + ok1(strncmp(p, "hhh", len) == 0); + p = next_lopt(p, &i, &len); + ok1(!p); - p = first_sopt(&i); - ok1(i == 0); - ok1(*p == 'j'); - p = next_sopt(p, &i); - ok1(i == 0); - ok1(*p == 'l'); - p = next_sopt(p, &i); - ok1(i == 1); - ok1(*p == 'm'); - p = next_sopt(p, &i); - ok1(i == 2); - ok1(*p == 'a'); - p = next_sopt(p, &i); - ok1(i == 3); - ok1(*p == 'b'); - p = next_sopt(p, &i); - ok1(i == 7); - ok1(*p == 'g'); - p = next_sopt(p, &i); - ok1(i == 8); - ok1(*p == 'h'); - p = next_sopt(p, &i); - ok1(!p); + p = first_sopt(&i); + ok1(i == j + 0); + ok1(*p == 'j'); + p = next_sopt(p, &i); + ok1(i == j + 0); + ok1(*p == 'l'); + p = next_sopt(p, &i); + ok1(i == j + 1); + ok1(*p == 'm'); + p = next_sopt(p, &i); + ok1(i == j + 2); + ok1(*p == 'a'); + p = next_sopt(p, &i); + ok1(i == j + 3); + ok1(*p == 'b'); + p = next_sopt(p, &i); + ok1(i == j + 7); + ok1(*p == 'g'); + p = next_sopt(p, &i); + ok1(i == j + 8); + ok1(*p == 'h'); + p = next_sopt(p, &i); + ok1(!p); + } return exit_status(); }