예제 #1
0
/* 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);
}
예제 #2
0
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);
}
예제 #3
0
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);
}
예제 #4
0
bool skiplist_member(struct skiplist *sl, void *key) {
    return skiplist_get(sl, key, NULL);
}