#include #include #include #include #include #include #include #include #include "skiplist.h" #include "logger.h" #include "shared_func.h" #define COUNT 1000000 #define LEVEL_COUNT 16 #define MIN_ALLOC_ONCE 32 #define LAST_INDEX (COUNT - 1) static int *numbers; static Skiplist sl; static SkiplistIterator iterator; static int instance_count = 0; static void free_test_func(void *ptr) { instance_count--; } static int compare_func(const void *p1, const void *p2) { return *((int *)p1) - *((int *)p2); } static int test_insert() { int i; int result; int64_t start_time; int64_t end_time; void *value; instance_count = 0; start_time = get_current_time_ms(); for (i=0; ikey - ((Record *)p2)->key; } static int test_stable_sort() { #define RECORDS 32 int i; int result; int index1; int index2; int delete_count; int total_delete_count; Skiplist sl; SkiplistIterator iterator; Record records[RECORDS]; Record *record; Record target; void *value; instance_count = 0; result = skiplist_init_ex(&sl, 12, compare_record, free_test_func, 128); if (result != 0) { return result; } for (i=0; ikey == records[i].key); } i = 0; skiplist_iterator(&sl, &iterator); while ((value=skiplist_next(&iterator)) != NULL) { i++; record = (Record *)value; printf("%d => #%d\n", record->key, record->line); } assert(i==RECORDS); target.key = 10; target.line = 0; if (skiplist_find_all(&sl, &target, &iterator) == 0) { printf("found key: %d\n", target.key); } i = 0; while ((value=skiplist_next(&iterator)) != NULL) { i++; record = (Record *)value; printf("%d => #%d\n", record->key, record->line); } printf("found record count: %d\n", i); total_delete_count = 0; for (i=0; i 0) || (result != 0 && delete_count == 0)); } assert(total_delete_count == RECORDS); assert(instance_count == 0); i = 0; skiplist_iterator(&sl, &iterator); while ((value=skiplist_next(&iterator)) != NULL) { i++; } assert(i == 0); skiplist_destroy(&sl); assert(instance_count == 0); return 0; } int main(int argc, char *argv[]) { int i; int tmp; int index1; int index2; int result; log_init(); numbers = (int *)malloc(sizeof(int) * COUNT); srand(time(NULL)); for (i=0; i