static void trivial(void) { char *missing = "missing"; char *items[] = {"zero", "one", "two", "three", NULL}; char *foo = "foo"; size_t ii, nitems = 4; hashset_t set = hashset_create(); if (set == NULL) { fprintf(stderr, "failed to create hashset instance\n"); abort(); } for (ii = 0; ii < nitems; ++ii) { hashset_add(set, items[ii]); } for (ii = 0; ii < nitems; ++ii) { assert(hashset_is_member(set, items[ii])); } assert(hashset_is_member(set, missing) == 0); assert(hashset_remove(set, items[1]) == 1); assert(hashset_num_items(set) == 3); assert(hashset_remove(set, items[1]) == 0); assert(hashset_add(set, foo) == 1); assert(hashset_add(set, foo) == 0); hashset_destroy(set); }
static void test_gaps(void) { hashset_t set = hashset_create(); /* fill the hashset */ hashset_add(set, (void *)0xbabe); hashset_add(set, (void *)0xbeef); hashset_add(set, (void *)0xbad); hashset_add(set, (void *)0xf00d); /* 0xf00d (nil) (nil) (nil) (nil) 0xbad 0xbabe 0xbeef */ /* make a gap */ hashset_remove(set, (void *)0xbeef); /* 0xf00d (nil) (nil) (nil) (nil) 0xbad 0xbabe 0x1 */ /* check that 0xf00d is still reachable */ assert(hashset_is_member(set, (void *)0xf00d)); /* add 0xbeef back */ hashset_add(set, (void *)0xbeef); /* 0xf00d (nil) (nil) (nil) (nil) 0xbad 0xbabe 0xbeef */ /* verify */ assert(hashset_is_member(set, (void *)0xbeef)); assert(hashset_is_member(set, (void *)0xf00d)); }
LIBCOUCHBASE_API libcouchbase_error_t libcouchbase_timer_destroy(libcouchbase_t instance, libcouchbase_timer_t timer) { if (hashset_is_member(instance->timers, timer)) { hashset_remove(instance->timers, timer); instance->io->delete_timer(instance->io, timer->event); instance->io->destroy_timer(instance->io, timer->event); free(timer); } return libcouchbase_synchandler_return(instance, LIBCOUCHBASE_SUCCESS); }
static void timer_callback(libcouchbase_socket_t sock, short which, void *arg) { libcouchbase_timer_t timer = arg; libcouchbase_t instance = timer->instance; timer->callback(timer, instance, timer->cookie); if (hashset_is_member(instance->timers, timer) && !timer->periodic) { instance->io->delete_timer(instance->io, timer->event); libcouchbase_timer_destroy(instance, timer); } libcouchbase_maybe_breakout(timer->instance); (void)sock; (void)which; }
static void test_fill_with_deleted_items() { char *s = "some string"; hashset_t set = hashset_create(); if (set == NULL) abort(); /* fill `set` with deleted items */ for (int i = 0; i < 8; ++i) { hashset_add(set, s + i); hashset_remove(set, s + i); } /* this should not cause an infinite loop */ assert(hashset_is_member(set, s) == 0); hashset_destroy(set); }
hashset_t hashset_substraction(hashset_t set, hashset_t substrahend) { hashset_t ret = hashset_create(); hashset_union(ret,set); int i; for(i = 0; i < substrahend->nitems; i++) { char* value = substrahend->items[i]; if(value != NULL) { if(hashset_is_member(ret,value)) { hashset_remove(ret, value); } } } return ret; }
int hashset_equals(hashset_t set, hashset_t other) { if(set->nitems == other->nitems) { int i; int j; for(i = 0; i < set->nitems; i++) { char* v = set->items[i]; if(!hashset_is_member(other, v)) { return 0; } } return 1; } return 0; }
static void test_rehashing_items_placed_beyond_nitems(void) { hashset_t set = hashset_create(); assert(hashset_add(set, (void *)20644128) == 1); assert(hashset_add(set, (void *)21747760) == 1); assert(hashset_add(set, (void *)17204864) == 1); assert(hashset_add(set, (void *)22937440) == 1); assert(hashset_add(set, (void *)14734272) == 1); assert(hashset_add(set, (void *)13948320) == 1); assert(hashset_add(set, (void *)18116496) == 1); assert(hashset_add(set, (void *)18229952) == 1); assert(hashset_add(set, (void *)20390128) == 1); assert(hashset_add(set, (void *)23523264) == 1); assert(hashset_add(set, (void *)22866784) == 1); assert(hashset_add(set, (void *)17501248) == 1); assert(hashset_add(set, (void *)17168832) == 1); assert(hashset_add(set, (void *)13389824) == 1); assert(hashset_add(set, (void *)15795136) == 1); assert(hashset_add(set, (void *)15154464) == 1); assert(hashset_add(set, (void *)22507840) == 1); assert(hashset_add(set, (void *)22977920) == 1); assert(hashset_add(set, (void *)20527584) == 1); assert(hashset_add(set, (void *)21557872) == 1); assert(hashset_add(set, (void *)23089952) == 1); assert(hashset_add(set, (void *)21606240) == 1); assert(hashset_add(set, (void *)25168704) == 1); assert(hashset_add(set, (void *)25198096) == 1); assert(hashset_add(set, (void *)25248000) == 1); assert(hashset_add(set, (void *)25260976) == 1); assert(hashset_add(set, (void *)25905520) == 1); assert(hashset_add(set, (void *)25934608) == 1); assert(hashset_add(set, (void *)26015264) == 1); assert(hashset_add(set, (void *)26044352) == 1); assert(hashset_add(set, (void *)24784800) == 1); assert(hashset_add(set, (void *)24813888) == 1); assert(hashset_add(set, (void *)24663936) == 1); assert(hashset_add(set, (void *)24693536) == 1); assert(hashset_add(set, (void *)24743792) == 1); assert(hashset_add(set, (void *)24756480) == 1); assert(hashset_is_member(set, (void *)20644128) == 1); assert(hashset_is_member(set, (void *)21747760) == 1); assert(hashset_is_member(set, (void *)17204864) == 1); assert(hashset_is_member(set, (void *)22937440) == 1); assert(hashset_is_member(set, (void *)14734272) == 1); assert(hashset_is_member(set, (void *)13948320) == 1); assert(hashset_is_member(set, (void *)18116496) == 1); assert(hashset_is_member(set, (void *)18229952) == 1); assert(hashset_is_member(set, (void *)20390128) == 1); assert(hashset_is_member(set, (void *)23523264) == 1); assert(hashset_is_member(set, (void *)22866784) == 1); assert(hashset_is_member(set, (void *)17501248) == 1); assert(hashset_is_member(set, (void *)17168832) == 1); assert(hashset_is_member(set, (void *)13389824) == 1); assert(hashset_is_member(set, (void *)15795136) == 1); assert(hashset_is_member(set, (void *)15154464) == 1); assert(hashset_is_member(set, (void *)22507840) == 1); assert(hashset_is_member(set, (void *)22977920) == 1); assert(hashset_is_member(set, (void *)20527584) == 1); assert(hashset_is_member(set, (void *)21557872) == 1); assert(hashset_is_member(set, (void *)23089952) == 1); assert(hashset_is_member(set, (void *)21606240) == 1); assert(hashset_is_member(set, (void *)25168704) == 1); assert(hashset_is_member(set, (void *)25198096) == 1); assert(hashset_is_member(set, (void *)25248000) == 1); assert(hashset_is_member(set, (void *)25260976) == 1); assert(hashset_is_member(set, (void *)25905520) == 1); assert(hashset_is_member(set, (void *)25934608) == 1); assert(hashset_is_member(set, (void *)26015264) == 1); assert(hashset_is_member(set, (void *)26044352) == 1); assert(hashset_is_member(set, (void *)24784800) == 1); assert(hashset_is_member(set, (void *)24813888) == 1); assert(hashset_is_member(set, (void *)24663936) == 1); assert(hashset_is_member(set, (void *)24693536) == 1); assert(hashset_is_member(set, (void *)24743792) == 1); assert(hashset_is_member(set, (void *)24756480) == 1); }