init也要加单元测试,但是推荐使用new接口。另外关于内存溢出问题交给使用者吧。new和free必须成对,init和destory必须成对出现

This commit is contained in:
建峰 2024-08-29 18:54:58 +08:00
parent d8012720b6
commit e8c5a06fa4
3 changed files with 31 additions and 22 deletions

4
.vscode/launch.json vendored
View File

@ -8,8 +8,8 @@
"name": "unicstl", "name": "unicstl",
"type": "cppdbg", "type": "cppdbg",
"request": "launch", "request": "launch",
// "program": "${workspaceFolder}/build/release/bin/test.exe", "program": "${workspaceFolder}/build/release/bin/test.exe",
"program": "${workspaceFolder}/build/release/bin/demo.exe", // "program": "${workspaceFolder}/build/release/bin/demo.exe",
"args": [], "args": [],
"stopAtEntry": false, "stopAtEntry": false,
"cwd": "${fileDirname}", "cwd": "${fileDirname}",

View File

@ -332,9 +332,6 @@ bool queue_init(struct _queue * queue, uint32_t obj_size)
queue->destory = queue_destory; queue->destory = queue_destory;
queue->print = queue_print; queue->print = queue_print;
// 防止多次调用init导致内存泄漏
queue->destory(queue);
// init front & back // init front & back
queue->_front = NULL; queue->_front = NULL;
queue->_back = NULL; queue->_back = NULL;
@ -374,11 +371,6 @@ bool queue_init2(struct _queue * queue, uint32_t obj_size, uint32_t capacity)
queue->destory = queue2_destory; queue->destory = queue2_destory;
queue->print = queue2_print; queue->print = queue2_print;
// 防止多次调用init导致内存泄漏
queue->_front = NULL;
queue->_back = NULL;
queue->destory(queue);
// init front & back // init front & back
queue->_front = (struct _queue_node *)malloc(sizeof(struct _queue_node)); queue->_front = (struct _queue_node *)malloc(sizeof(struct _queue_node));
if(queue->_front == NULL) if(queue->_front == NULL)
@ -406,7 +398,8 @@ done:
queue_t queue_new(void) queue_t queue_new(void)
{ {
return (struct _queue *)calloc(1, sizeof(struct _queue)); // return (struct _queue *)calloc(1, sizeof(struct _queue));
return (struct _queue *)malloc(sizeof(struct _queue));
} }
void queue_free(queue_t* queue) void queue_free(queue_t* queue)

View File

@ -10,26 +10,37 @@
*/ */
#include "test.h" #include "test.h"
static void test_queue_new(void) static void test_queue_init(void)
{ {
queue_t queue = NULL; struct _queue queue;
queue = queue_new(); // ------------------------------
TEST_ASSERT_NOT_NULL(queue); TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int)));
TEST_ASSERT_FALSE(queue_init(&queue, 0));
TEST_ASSERT_TRUE(queue_init(&queue, sizeof(int)));
queue.destory(&queue);
queue_free(&queue); TEST_ASSERT_TRUE(queue_init(&queue, sizeof(char)));
TEST_ASSERT_NULL(queue); queue.destory(&queue);
TEST_ASSERT_NOT_NULL(&queue); // ------------------------------
queue_free(&queue); TEST_ASSERT_FALSE(queue_init2(NULL, sizeof(int), 1));
queue_free(NULL); TEST_ASSERT_FALSE(queue_init2(&queue, 0, 1));
TEST_ASSERT_FALSE(queue_init2(&queue, sizeof(int), 0));
TEST_ASSERT_TRUE(queue_init2(&queue, sizeof(int), 1));
queue.destory(&queue);
TEST_ASSERT_TRUE(queue_init2(&queue, sizeof(int), 5));
queue.destory(&queue);
} }
static void test_queue_init(void) static void test_queue_new(void)
{ {
queue_t queue = NULL; queue_t queue = NULL;
// ------------------------------ // ------------------------------
queue = queue_new(); queue = queue_new();
TEST_ASSERT_NOT_NULL(queue);
TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int))); TEST_ASSERT_FALSE(queue_init(NULL, sizeof(int)));
TEST_ASSERT_FALSE(queue_init(queue, 0)); TEST_ASSERT_FALSE(queue_init(queue, 0));
TEST_ASSERT_TRUE(queue_init(queue, sizeof(int))); TEST_ASSERT_TRUE(queue_init(queue, sizeof(int)));
@ -38,12 +49,17 @@ static void test_queue_init(void)
// ------------------------------ // ------------------------------
queue = queue_new(); queue = queue_new();
TEST_ASSERT_NOT_NULL(queue);
TEST_ASSERT_FALSE(queue_init2(NULL, 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, 0, 1));
TEST_ASSERT_FALSE(queue_init2(queue, sizeof(int), 0)); TEST_ASSERT_FALSE(queue_init2(queue, sizeof(int), 0));
TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 1)); TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 1));
TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 5)); TEST_ASSERT_TRUE(queue_init2(queue, sizeof(int), 5));
queue_free(&queue); queue_free(&queue);
TEST_ASSERT_NULL(queue);
queue_free(&queue); // queue_free(NULL);
} }
@ -607,8 +623,8 @@ static void test_queue2_struct(void)
void test_queue(void) void test_queue(void)
{ {
// TEST_MESSAGE("----- test_queue -----"); // TEST_MESSAGE("----- test_queue -----");
RUN_TEST(test_queue_new);
RUN_TEST(test_queue_init); RUN_TEST(test_queue_init);
RUN_TEST(test_queue_new);
RUN_TEST(test_queue_push); RUN_TEST(test_queue_push);
RUN_TEST(test_queue_pop); RUN_TEST(test_queue_pop);
RUN_TEST(test_queue_clear); RUN_TEST(test_queue_clear);