mirror of
https://gitee.com/apaki/unicstl.git
synced 2026-05-28 22:54:19 +08:00
314 lines
6.5 KiB
C
314 lines
6.5 KiB
C
/**
|
|
* @file perf_deque.c
|
|
* @author wenjf (Orig5826@163.com)
|
|
* @brief
|
|
* @version 0.1
|
|
* @date 2026-05-12
|
|
*
|
|
* @copyright Copyright (c) 2026
|
|
*
|
|
*/
|
|
#include "perf.h"
|
|
|
|
#if 0
|
|
static void demo_deque_num(void)
|
|
{
|
|
size_t i = 0;
|
|
int data[] = { 1,2,3,4,5,6,7,8,9,10 };
|
|
int temp = 0;
|
|
size_t len = sizeof(data) / sizeof(data[0]);
|
|
|
|
deque_t deque = deque_new(sizeof(int), len);
|
|
deque->print_obj = print_num;
|
|
|
|
printf("\n\n----- demo_deque_num -----\n");
|
|
|
|
printf("----- after push_back -----\n");
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
deque->push_back(deque, &data[i]);
|
|
|
|
deque->front(deque, &temp);
|
|
printf("front = ");
|
|
deque->print_obj(&temp);
|
|
|
|
deque->back(deque, &temp);
|
|
printf("\tback = ");
|
|
deque->print_obj(&temp);
|
|
|
|
printf("\tsize = %2d\n", deque->size(deque));
|
|
}
|
|
printf("----- print -----\n");
|
|
deque->print(deque);
|
|
printf("\n");
|
|
|
|
deque->clear(deque);
|
|
if (deque->empty(deque))
|
|
{
|
|
printf("----- empty -----\n");
|
|
}
|
|
|
|
printf("----- push_back -----\n");
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
deque->push_back(deque, &data[i]);
|
|
}
|
|
|
|
printf("----- after pop_back -----\n");
|
|
for (i = 0; i < len + 1; i++)
|
|
{
|
|
if (true == deque->pop_back(deque, &temp))
|
|
{
|
|
printf("pop = ");
|
|
deque->print_obj(&temp);
|
|
|
|
if (true == deque->front(deque, &temp))
|
|
{
|
|
printf("front = ");
|
|
deque->print_obj(&temp);
|
|
}
|
|
|
|
if (deque->back(deque, &temp))
|
|
{
|
|
printf("back = ");
|
|
deque->print_obj(&temp);
|
|
}
|
|
|
|
printf("size = %2d\n", deque->size(deque));
|
|
}
|
|
else
|
|
{
|
|
printf("pop failed! because it is empty\n");
|
|
}
|
|
|
|
if (deque->empty(deque))
|
|
{
|
|
printf("----- empty -----\n");
|
|
}
|
|
}
|
|
|
|
printf("----- after push_front -----\n");
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
deque->push_front(deque, &data[i]);
|
|
|
|
deque->front(deque, &temp);
|
|
printf("front = ");
|
|
deque->print_obj(&temp);
|
|
|
|
deque->back(deque, &temp);
|
|
printf("\tback = ");
|
|
deque->print_obj(&temp);
|
|
|
|
printf("\tsize = %2d\n", deque->size(deque));
|
|
}
|
|
printf("----- print -----\n");
|
|
deque->print(deque);
|
|
printf("\n");
|
|
|
|
deque->clear(deque);
|
|
if (deque->empty(deque))
|
|
{
|
|
printf("----- empty -----\n");
|
|
}
|
|
|
|
printf("----- push_front -----\n");
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
deque->push_front(deque, &data[i]);
|
|
}
|
|
|
|
for (i = 0; i < len + 1; i++)
|
|
{
|
|
if (true == deque->pop_front(deque, &temp))
|
|
{
|
|
printf("pop = ");
|
|
deque->print_obj(&temp);
|
|
|
|
if (true == deque->front(deque, &temp))
|
|
{
|
|
printf("front = ");
|
|
deque->print_obj(&temp);
|
|
}
|
|
|
|
if (deque->back(deque, &temp))
|
|
{
|
|
printf("back = ");
|
|
deque->print_obj(&temp);
|
|
}
|
|
|
|
printf("size = %2d\n", deque->size(deque));
|
|
}
|
|
}
|
|
|
|
#if 0
|
|
printf("----- push_front -----\n");
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
deque->push_front(deque, &data[i]);
|
|
}
|
|
printf("----- print -----\n");
|
|
deque->print(deque);
|
|
printf("\n");
|
|
|
|
printf("----- set -----\n");
|
|
temp = 11;
|
|
deque->set(deque, 0, &temp);
|
|
|
|
temp = 22;
|
|
deque->set(deque, len/2, &temp);
|
|
|
|
temp = 33;
|
|
deque->set(deque, len - 1, &temp);
|
|
|
|
printf("----- print -----\n");
|
|
deque->print(deque);
|
|
printf("\n");
|
|
|
|
printf("----- get -----\n");
|
|
for (i = 0; i < len; i++)
|
|
{
|
|
if (true == deque->get(deque, i, &temp))
|
|
{
|
|
printf("deque[%2d] = ", i);
|
|
deque->print_obj(&temp);
|
|
printf("\n");
|
|
}
|
|
}
|
|
#endif
|
|
|
|
deque_free(&deque);
|
|
}
|
|
#endif
|
|
|
|
#define CAPACITY_T1 1024
|
|
#define OBJ_SIZE_T1 256
|
|
|
|
#define CAPACITY_T2 1024
|
|
#define OBJ_SIZE_T2 4096
|
|
|
|
#define CAPACITY_T3 8192
|
|
#define OBJ_SIZE_T3 4096
|
|
|
|
struct _test_obj
|
|
{
|
|
void *obj;
|
|
size_t obj_size;
|
|
size_t capacity;
|
|
}test_obj;
|
|
|
|
static deque_t deque = NULL;
|
|
|
|
void perf_deque_new(void)
|
|
{
|
|
deque = deque_new(test_obj.obj_size, test_obj.capacity);
|
|
}
|
|
|
|
void perf_deque_push_back(void)
|
|
{
|
|
for (size_t i = 0; i < test_obj.capacity; i++)
|
|
{
|
|
deque->push_back(deque, &test_obj.obj);
|
|
}
|
|
}
|
|
|
|
void perf_deque_pop_back(void)
|
|
{
|
|
for (size_t i = 0; i < test_obj.capacity; i++)
|
|
{
|
|
deque->pop_back(deque, &test_obj.obj);
|
|
}
|
|
}
|
|
|
|
void perf_deque_push_front(void)
|
|
{
|
|
for (size_t i = 0; i < test_obj.capacity; i++)
|
|
{
|
|
deque->push_front(deque, &test_obj.obj);
|
|
}
|
|
}
|
|
|
|
void perf_deque_pop_front(void)
|
|
{
|
|
for (size_t i = 0; i < test_obj.capacity; i++)
|
|
{
|
|
deque->pop_front(deque, &test_obj.obj);
|
|
}
|
|
}
|
|
|
|
void perf_deque_free(void)
|
|
{
|
|
deque_free(&deque);
|
|
}
|
|
|
|
|
|
void perf_deque_t1(void)
|
|
{
|
|
test_obj.capacity = CAPACITY_T1;
|
|
test_obj.obj_size = OBJ_SIZE_T1;
|
|
test_obj.obj = malloc(test_obj.capacity);
|
|
if(test_obj.obj == NULL)
|
|
{
|
|
printf( __FUNCTION__, "malloc failed");
|
|
return;
|
|
}
|
|
|
|
RUN_PERF_T1( perf_deque_new() );
|
|
RUN_PERF_T1( perf_deque_push_back() );
|
|
RUN_PERF_T1( perf_deque_pop_back() );
|
|
RUN_PERF_T1( perf_deque_push_front() );
|
|
RUN_PERF_T1( perf_deque_pop_front() );
|
|
RUN_PERF_T1( perf_deque_free() );
|
|
|
|
free(test_obj.obj);
|
|
}
|
|
|
|
void perf_deque_t2(void)
|
|
{
|
|
test_obj.capacity = CAPACITY_T2;
|
|
test_obj.obj_size = OBJ_SIZE_T2;
|
|
test_obj.obj = malloc(test_obj.capacity);
|
|
if(test_obj.obj == NULL)
|
|
{
|
|
printf( __FUNCTION__, "malloc failed");
|
|
return;
|
|
}
|
|
|
|
RUN_PERF_T2( perf_deque_new() );
|
|
RUN_PERF_T2( perf_deque_push_back() );
|
|
RUN_PERF_T2( perf_deque_pop_back() );
|
|
RUN_PERF_T2( perf_deque_push_front() );
|
|
RUN_PERF_T2( perf_deque_pop_front() );
|
|
RUN_PERF_T2( perf_deque_free() );
|
|
|
|
free(test_obj.obj);
|
|
}
|
|
|
|
void perf_deque_t3(void)
|
|
{
|
|
test_obj.capacity = CAPACITY_T3;
|
|
test_obj.obj_size = OBJ_SIZE_T3;
|
|
test_obj.obj = malloc(test_obj.capacity);
|
|
if(test_obj.obj == NULL)
|
|
{
|
|
printf( __FUNCTION__, "malloc failed");
|
|
return;
|
|
}
|
|
|
|
RUN_PERF_T3( perf_deque_new() );
|
|
RUN_PERF_T3( perf_deque_push_back() );
|
|
RUN_PERF_T3( perf_deque_pop_back() );
|
|
RUN_PERF_T3( perf_deque_push_front() );
|
|
RUN_PERF_T3( perf_deque_pop_front() );
|
|
RUN_PERF_T3( perf_deque_free() );
|
|
|
|
free(test_obj.obj);
|
|
}
|
|
|
|
void perf_deque(void)
|
|
{
|
|
perf_deque_t1();
|
|
perf_deque_t2();
|
|
perf_deque_t3();
|
|
}
|