size_t skiplist_free(struct skiplist *sl, skiplist_free_cb *cb, void *udata) { assert(sl); size_t ct = skiplist_clear(sl, cb, udata); node_free(sl, sl->head); sl->alloc(sl, sizeof(*sl), 0, sl->alloc_udata); return ct; }
size_t skiplist_free(skiplist* list) { ASSERT(list != NULL); size_t count = skiplist_clear(list); FREE(list->head); FREE(list); return count; }
void case_skiplist_base() { struct skiplist *skiplist = skiplist(NULL); assert(skiplist != NULL); assert(skiplist->len == 0); assert(skiplist->head != NULL); assert(skiplist->tail == skiplist->head); assert(skiplist->level == 1); assert(skiplist_push(skiplist, 2, NULL) == SKIPLIST_OK); assert(skiplist_push(skiplist, 1, NULL) == SKIPLIST_OK); assert(skiplist_push(skiplist, 3, NULL) == SKIPLIST_OK); assert(skiplist_len(skiplist) == 3); assert(skiplist_level(skiplist) <= SKIPLIST_LEVEL_MAX); assert(skiplist->tail->score == 3); skiplist_clear(skiplist); assert(skiplist_level(skiplist) == 1); assert(skiplist_len(skiplist) == 0); assert(skiplist->head != NULL); assert(skiplist->tail == skiplist->head); skiplist_free(skiplist); }