/* Measure getting _nonexistent_ values (lookup failure). */ static void get_nonexistent(void) { skiplist *sl = skiplist_new(intptr_cmp, NULL, NULL); for (intptr_t i=0; i < lim; i++) { skiplist_add(sl, (void *) i, (void *) i); } TIME(pre); for (intptr_t i=0; i < lim; i++) { intptr_t k = (i * largeish_prime) + lim; intptr_t v = 0; skiplist_get(sl, (void *) k, (void **)&v); assert(v == 0); if (0) { printf("%lu %lu\n", k, v); } } TIME(post); TDIFF(); skiplist_free(sl, NULL, NULL); }
static void set_and_get(void) { skiplist *sl = skiplist_new(intptr_cmp, NULL, NULL); TIME(pre); for (intptr_t i=0; i < lim; i++) { intptr_t k = i % (lim / 2); skiplist_set(sl, (void *) k, (void *) k, NULL); } for (intptr_t i=0; i < lim; i++) { intptr_t k = (i * largeish_prime) % (lim / 2); intptr_t v = (intptr_t)0; skiplist_get(sl, (void *) k, (void **)&v); if (0) { printf("%lu %lu\n", k, v); } assert(v == k); } TIME(post); TDIFF(); skiplist_free(sl, NULL, NULL); }
void case_skiplist_get() { struct skiplist *skiplist = skiplist(NULL); int v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7, v8 = 8, v9 = 9; assert(skiplist_push(skiplist, 3, (void *)(&v3)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 9, (void *)(&v9)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 7, (void *)(&v7)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 2, (void *)(&v2)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 6, (void *)(&v6)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 5, (void *)(&v5)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 8, (void *)(&v8)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 1, (void *)(&v1)) == SKIPLIST_OK); assert(skiplist_push(skiplist, 4, (void *)(&v4)) == SKIPLIST_OK); assert(skiplist_len(skiplist) == 9); assert(skiplist_get(skiplist, 8) == &v8); assert(skiplist_get(skiplist, 9) == &v9); assert(skiplist_get(skiplist, 1) == &v1); assert(skiplist_get(skiplist, 2) == &v2); assert(skiplist_get(skiplist, 10) == NULL); assert(skiplist_get(skiplist, 9999) == NULL); skiplist_free(skiplist); }
bool skiplist_member(struct skiplist *sl, void *key) { return skiplist_get(sl, key, NULL); }