X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fhtable%2Ftest%2Frun.c;h=09cde890f7ea34af2e8be9c080ebd472c2b8f21c;hb=b7cb7dfdf27243696183698b2f82522003cc1216;hp=1a9e2de4cb6e7f98fe5e75485e06b37c73de26d5;hpb=0c3590dc33d644f73bb8587db454c491830aaf26;p=ccan diff --git a/ccan/htable/test/run.c b/ccan/htable/test/run.c index 1a9e2de4..09cde890 100644 --- a/ccan/htable/test/run.c +++ b/ccan/htable/test/run.c @@ -97,7 +97,7 @@ static bool check_mask(struct htable *ht, uint64_t val[], unsigned num) int main(int argc, char *argv[]) { - unsigned int i; + unsigned int i, weight; uintptr_t perfect_bit; struct htable ht; uint64_t val[NUM_VALS]; @@ -105,7 +105,7 @@ int main(int argc, char *argv[]) void *p; struct htable_iter iter; - plan_tests(29); + plan_tests(36); for (i = 0; i < NUM_VALS; i++) val[i] = i; dne = i; @@ -121,7 +121,14 @@ int main(int argc, char *argv[]) add_vals(&ht, val, 0, 1); ok1(ht.bits == 1); ok1(ht.max == 1); - ok1(ht.common_mask == -1); + weight = 0; + for (i = 0; i < sizeof(ht.common_mask) * CHAR_BIT; i++) { + if (ht.common_mask & ((uintptr_t)1 << i)) { + weight++; + } + } + /* Only one bit should be clear. */ + ok1(weight == i-1); /* Mask should be set. */ ok1(check_mask(&ht, val, 1)); @@ -149,6 +156,11 @@ int main(int argc, char *argv[]) i++; ok1(i == NUM_VALS); + i = 0; + for (p = htable_prev(&ht, &iter); p; p = htable_prev(&ht, &iter)) + i++; + ok1(i == NUM_VALS); + /* Delete all. */ del_vals(&ht, val, NUM_VALS); ok1(!htable_get(&ht, hash(&val[0], NULL), objcmp, &val[0])); @@ -184,5 +196,17 @@ int main(int argc, char *argv[]) ok1(ht.perfect_bit != 0); htable_clear(&ht); + ok1(htable_init_sized(&ht, hash, NULL, 1024)); + ok1(ht.max >= 1024); + htable_clear(&ht); + + ok1(htable_init_sized(&ht, hash, NULL, 1023)); + ok1(ht.max >= 1023); + htable_clear(&ht); + + ok1(htable_init_sized(&ht, hash, NULL, 1025)); + ok1(ht.max >= 1025); + htable_clear(&ht); + return exit_status(); }