/* * Copyright (c) 2020 YuQing <384681@qq.com> * * This program is free software: you can use, redistribute, and/or modify * it under the terms of the Lesser GNU General Public License, version 3 * or later ("LGPL"), as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. * * You should have received a copy of the Lesser GNU General Public License * along with this program. If not, see . */ #include #include #include #include #include #include #include #include #include "fastcommon/uniq_skiplist.h" #include "fastcommon/logger.h" #include "fastcommon/shared_func.h" #define COUNT 1000000 #define LEVEL_COUNT 16 #define MIN_ALLOC_ONCE 4 #define LAST_INDEX (COUNT - 1) static int *numbers; static UniqSkiplistFactory factory; static UniqSkiplist *sl = NULL; static UniqSkiplistIterator iterator; static int instance_count = 0; static void free_test_func(UniqSkiplist *sl, void *ptr, const int delay_seconds) { instance_count--; } static int compare_func(const void *p1, const void *p2) { return *((int *)p1) - *((int *)p2); } void set_rand_numbers(const int multiple) { int i; int tmp; int index1; int index2; for (i=0; itop) { value = (int *)node->data; printf("value[%d]: %d\n", count++, *value); node = UNIQ_SKIPLIST_LEVEL0_PREV_NODE(node); } } } int main(int argc, char *argv[]) { const bool allocator_use_lock = false; int result; int64_t start_time; int64_t end_time; start_time = get_current_time_ms(); log_init(); numbers = (int *)malloc(sizeof(int) * COUNT); srand(time(NULL)); fast_mblock_manager_init(); result = uniq_skiplist_init_ex2(&factory, LEVEL_COUNT, compare_func, free_test_func, 0, MIN_ALLOC_ONCE, 0, true, allocator_use_lock, NULL); if (result != 0) { return result; } sl = uniq_skiplist_new(&factory, 8); if (sl == NULL) { return ENOMEM; } test_insert(); printf("\n"); fast_mblock_manager_stat_print(false); test_delete(); printf("\n"); test_find_range(); test_reverse_iterator(); test_delete(); printf("\n"); test_clear(); printf("\n"); test_insert(); printf("\n"); test_clear(); printf("\n"); test_insert(); printf("\n"); uniq_skiplist_free(sl); fast_mblock_manager_stat_print(false); uniq_skiplist_destroy(&factory); assert(instance_count == 0); end_time = get_current_time_ms(); printf("pass OK, time used: %"PRId64" ms\n", end_time - start_time); return 0; }