From 142a248d3444237a472f3cd1ea382f1bc70effd2 Mon Sep 17 00:00:00 2001 From: wjf-hs Date: Thu, 29 Aug 2024 14:36:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E4=BD=95=E4=BF=9D=E8=AF=81=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95=E8=A6=86=E7=9B=96=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/common.h | 2 ++ src/queue.c | 34 +++++++++++++++++++----- test/test_queue.c | 68 ++++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 94 insertions(+), 10 deletions(-) diff --git a/include/common.h b/include/common.h index 9ef188e..50ffb2c 100644 --- a/include/common.h +++ b/include/common.h @@ -11,6 +11,8 @@ #ifndef _COMMON_H_ #define _COMMON_H_ +#define NDEBUG 1 + #include #include #include diff --git a/src/queue.c b/src/queue.c index 8424df9..050b6ed 100644 --- a/src/queue.c +++ b/src/queue.c @@ -137,6 +137,10 @@ bool queue_init(struct _queue * queue, uint32_t obj_size) { assert(queue != NULL); assert(obj_size > 0); + if(queue == NULL || obj_size == 0) + { + return false; + } // attribute init queue->_size = 0; @@ -297,6 +301,11 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity) { assert(queue != NULL); assert(obj_size > 0); + assert(capacity > 0); + if(queue == NULL || obj_size == 0 || capacity == 0) + { + return false; + } // attribute init queue->_size = 0; @@ -321,7 +330,8 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity) queue->_front = (struct _queue_node *)malloc(sizeof(struct _queue_node)); if(queue->_front == NULL) { - return false; + goto done; + // return false; } queue->_back = queue->_front; @@ -329,23 +339,35 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity) queue->_front->obj = calloc(queue->_capacity, queue->_obj_size); if(queue->_front->obj == NULL) { - return false; + goto done1; + // return false; } queue->_index_front = 0; queue->_index_back = 0; + + return true; + +done1: + free(queue->_front); +done: + return false; } queue_t queue_new(void) { - return (struct _queue *)malloc(sizeof(struct _queue)); + return (struct _queue *)calloc(1, sizeof(struct _queue)); } void queue_free(queue_t* queue) { - if(*queue != NULL) + // assert(queue != NULL); + if(queue != NULL && *queue != NULL) { - (*queue)->destory(*queue); + if((*queue)->destory != NULL) + { + (*queue)->destory(*queue); + } free(*queue); + *queue = NULL; } - *queue = NULL; } diff --git a/test/test_queue.c b/test/test_queue.c index 000a470..d8990e8 100644 --- a/test/test_queue.c +++ b/test/test_queue.c @@ -10,10 +10,67 @@ */ #include "test.h" - /** - * @brief µ¥Ïî¶ÓÁвâÊÔ - * - */ +static void test_queue_new(void) +{ + queue_t queue = NULL; + queue = queue_new(); + TEST_ASSERT_NOT_NULL(queue); + + queue_free(&queue); + TEST_ASSERT_NULL(queue); + + queue_free(NULL); +} + +static void test_queue_init(void) +{ + queue_t queue = NULL; + + // ------------------------------ + queue = queue_new(); + TEST_ASSERT_TRUE(queue_init(queue, sizeof(int))); + TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int))); + TEST_ASSERT_FALSE(queue_init(queue, 0)); + queue_free(&queue); + + // ------------------------------ + queue = queue_new(); + TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 1)); + TEST_ASSERT_FALSE(queue_init2(NULL, sizeof(int),1 )); + TEST_ASSERT_FALSE(queue_init2(queue, 0, 1)); + TEST_ASSERT_FALSE(queue_init2(queue, sizeof(int), 0)); + queue_free(&queue); + + queue_init2(queue, sizeof(int), 1); +} + +static void test_queue_push(void) +{ + int temp = 0; + int data[] = { 1,2,3,4,5,6,7,8,9,10 }; + uint32_t len = sizeof(data) / sizeof(data[0]); + uint32_t i = 0; + + queue_t queue = NULL; + + // ------------------------------ + queue = queue_new(); + queue_init(queue, sizeof(int)); + for(i = 0; i < len; i++) + { + TEST_ASSERT_TRUE(queue->push(queue, &data[i])); + } + queue_free(&queue); + + // ------------------------------ + queue = queue_new(); + queue_init2(queue, sizeof(int), 10); + + queue_free(&queue); +} + + + static void test_queue_num(void) { uint32_t i = 0; @@ -254,6 +311,9 @@ static void test_queue2_fifo_num(void) void test_queue(void) { // TEST_MESSAGE("----- test_queue -----"); + RUN_TEST(test_queue_new); + RUN_TEST(test_queue_init); + RUN_TEST(test_queue_num); RUN_TEST(test_queue_struct);