X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fjmap%2Ftest%2Frun-uintidx-type.c;h=7427d33c131addf70994079dfc14559f095c48cd;hp=1dcb8829048adf0f99cf3717f6eb2eb3b50214e2;hb=6abc867fce8c3eba40eb26092d31e34b47dd9165;hpb=2965496c70c345ea83e14d4b25e8687f7c682531 diff --git a/ccan/jmap/test/run-uintidx-type.c b/ccan/jmap/test/run-uintidx-type.c index 1dcb8829..7427d33c 100644 --- a/ccan/jmap/test/run-uintidx-type.c +++ b/ccan/jmap/test/run-uintidx-type.c @@ -1,10 +1,11 @@ #include -#include #include struct foo; -JMAP_DEFINE_UINTIDX_TYPE(struct foo, foo); +struct jmap_foo { + JMAP_MEMBERS(unsigned long, struct foo *); +}; #define NUM 100 @@ -12,119 +13,125 @@ int main(int argc, char *argv[]) { struct jmap_foo *map; struct foo *foo[NUM], **foop; - unsigned int i; + unsigned long i; - plan_tests(37 + NUM*2 + 19); + plan_tests(40 + NUM*2 + 19); for (i = 0; i < NUM; i++) foo[i] = malloc(20); - map = jmap_foo_new(); - ok1(jmap_foo_error(map) == NULL); + map = jmap_new(struct jmap_foo); + ok1(jmap_error(map) == NULL); - ok1(jmap_foo_test(map, 0) == false); - ok1(jmap_foo_get(map, 0) == (struct foo *)NULL); - ok1(jmap_foo_popcount(map, 0, -1) == 0); - ok1(jmap_foo_first(map, 0) == 0); - ok1(jmap_foo_last(map, 0) == 0); - ok1(jmap_foo_del(map, 0) == false); + ok1(jmap_test(map, 0) == false); + ok1(jmap_get(map, 0) == (struct foo *)NULL); + ok1(jmap_popcount(map, 0, -1) == 0); + ok1(jmap_first(map) == 0); + ok1(jmap_last(map) == 0); + ok1(jmap_del(map, 0) == false); /* Set only works on existing cases. */ - ok1(jmap_foo_set(map, 0, foo[0]) == false); - ok1(jmap_foo_add(map, 0, foo[1]) == true); - ok1(jmap_foo_get(map, 0) == foo[1]); - ok1(jmap_foo_set(map, 0, foo[0]) == true); - ok1(jmap_foo_get(map, 0) == foo[0]); - - ok1(jmap_foo_test(map, 0) == true); - ok1(jmap_foo_popcount(map, 0, -1) == 1); - ok1(jmap_foo_first(map, -1) == 0); - ok1(jmap_foo_last(map, -1) == 0); - ok1(jmap_foo_next(map, 0, -1) == (size_t)-1); - ok1(jmap_foo_prev(map, 0, -1) == (size_t)-1); - - ok1(jmap_foo_del(map, 0) == true); - ok1(jmap_foo_test(map, 0) == false); - ok1(jmap_foo_popcount(map, 0, -1) == 0); + ok1(jmap_set(map, 1, foo[0]) == false); + ok1(jmap_add(map, 1, foo[1]) == true); + ok1(jmap_get(map, 1) == foo[1]); + ok1(jmap_set(map, 1, foo[0]) == true); + ok1(jmap_get(map, 1) == foo[0]); + + ok1(jmap_test(map, 1) == true); + ok1(jmap_popcount(map, 0, -1) == 1); + ok1(jmap_first(map) == 1); + ok1(jmap_last(map) == 1); + ok1(jmap_next(map, 0) == 1); + ok1(jmap_next(map, 1) == 0); + ok1(jmap_prev(map, 2) == 1); + ok1(jmap_prev(map, 1) == 0); + + ok1(jmap_del(map, 1) == true); + ok1(jmap_test(map, 1) == false); + ok1(jmap_popcount(map, 0, -1) == 0); for (i = 0; i < NUM; i++) - jmap_foo_add(map, i, foo[i]); - - ok1(jmap_foo_popcount(map, 0, -1) == NUM); - ok1(jmap_foo_popcount(map, 0, NUM-1) == NUM); - ok1(jmap_foo_popcount(map, 0, NUM/2-1) == NUM/2); - ok1(jmap_foo_popcount(map, NUM/2, NUM) == NUM - NUM/2); - - ok1(jmap_foo_nth(map, 0, -1) == 0); - ok1(jmap_foo_nth(map, NUM-1, -1) == NUM-1); - ok1(jmap_foo_nth(map, NUM, -1) == (size_t)-1); - ok1(jmap_foo_first(map, -1) == 0); - ok1(jmap_foo_last(map, -1) == NUM-1); - ok1(jmap_foo_next(map, 0, -1) == 1); - ok1(jmap_foo_next(map, NUM-1, -1) == (size_t)-1); - ok1(jmap_foo_prev(map, 1, -1) == 0); - ok1(jmap_foo_prev(map, 0, -1) == (size_t)-1); - - ok1(jmap_foo_get(map, 0) == foo[0]); - ok1(jmap_foo_get(map, NUM-1) == foo[NUM-1]); - ok1(jmap_foo_get(map, NUM) == NULL); + jmap_add(map, i+1, foo[i]); + + ok1(jmap_count(map) == NUM); + ok1(jmap_popcount(map, 0, -1) == NUM); + ok1(jmap_popcount(map, 1, NUM) == NUM); + ok1(jmap_popcount(map, 1, NUM/2) == NUM/2); + ok1(jmap_popcount(map, NUM/2+1, NUM) == NUM - NUM/2); + + ok1(jmap_nth(map, 0, -1) == 1); + ok1(jmap_nth(map, NUM-1, -1) == NUM); + ok1(jmap_nth(map, NUM, -1) == (size_t)-1); + ok1(jmap_first(map) == 1); + ok1(jmap_last(map) == NUM); + ok1(jmap_next(map, 1) == 2); + ok1(jmap_next(map, NUM) == 0); + ok1(jmap_prev(map, 2) == 1); + ok1(jmap_prev(map, 1) == 0); + + ok1(jmap_get(map, 1) == foo[0]); + ok1(jmap_get(map, NUM) == foo[NUM-1]); + ok1(jmap_get(map, NUM+1) == NULL); /* Reverse values in map. */ for (i = 0; i < NUM; i++) { - foop = jmap_foo_getval(map, i); + foop = jmap_getval(map, i+1); ok1(*foop == foo[i]); *foop = foo[NUM-1-i]; - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); } for (i = 0; i < NUM; i++) - ok1(jmap_foo_get(map, i) == foo[NUM-1-i]); + ok1(jmap_get(map, i+1) == foo[NUM-1-i]); - foop = jmap_foo_nthval(map, 0, &i); - ok1(i == 0); + foop = jmap_nthval(map, 0, &i); + ok1(i == 1); ok1(*foop == foo[NUM-1]); - jmap_foo_putval(map, &foop); - foop = jmap_foo_nthval(map, NUM-1, &i); - ok1(i == NUM-1); + jmap_putval(map, &foop); + foop = jmap_nthval(map, NUM-1, &i); + ok1(i == NUM); ok1(*foop == foo[0]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_firstval(map, &i); - ok1(i == 0); + foop = jmap_firstval(map, &i); + ok1(i == 1); ok1(*foop == foo[NUM-1]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_nextval(map, &i); - ok1(i == 1); + foop = jmap_nextval(map, &i); + ok1(i == 2); ok1(*foop == foo[NUM-2]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_prevval(map, &i); - ok1(i == 0); + foop = jmap_prevval(map, &i); + ok1(i == 1); ok1(*foop == foo[NUM-1]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_prevval(map, &i); + foop = jmap_prevval(map, &i); ok1(foop == NULL); - foop = jmap_foo_lastval(map, &i); - ok1(i == NUM-1); + foop = jmap_lastval(map, &i); + ok1(i == NUM); ok1(*foop == foo[0]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_prevval(map, &i); - ok1(i == NUM-2); + foop = jmap_prevval(map, &i); + ok1(i == NUM-1); ok1(*foop == foo[1]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_nextval(map, &i); - ok1(i == NUM-1); + foop = jmap_nextval(map, &i); + ok1(i == NUM); ok1(*foop == foo[0]); - jmap_foo_putval(map, &foop); + jmap_putval(map, &foop); - foop = jmap_foo_nextval(map, &i); + foop = jmap_nextval(map, &i); ok1(foop == NULL); - ok1(jmap_foo_error(map) == NULL); - jmap_foo_free(map); + ok1(jmap_error(map) == NULL); + jmap_free(map); + + for (i = 0; i < NUM; i++) + free(foo[i]); return exit_status(); }