队列push测试新增队列节点new函数,方便后续修改代码结构(暂未调用,等单元测试函数写好后)。

This commit is contained in:
建峰 2024-08-29 15:07:01 +08:00
parent 142a248d34
commit 6ef644b07d
2 changed files with 76 additions and 5 deletions

View File

@ -10,6 +10,30 @@
*/ */
#include "queue.h" #include "queue.h"
static struct _queue_node * queue_node_new(void* obj, uint32_t obj_size)
{
void * obj_new = malloc(obj_size);
if (obj_new == NULL)
{
goto done;
}
memmove(obj_new, obj, obj_size);
struct _queue_node* node_new = (struct _queue_node*)malloc(sizeof(struct _queue_node));
if(node_new == NULL)
{
goto done1;
}
node_new->obj = obj_new;
node_new->next = NULL;
return node_new;
done1:
free(obj_new);
done:
return NULL;
}
bool queue_push(struct _queue* self, void* obj) bool queue_push(struct _queue* self, void* obj)
{ {
assert(self != NULL); assert(self != NULL);
@ -18,14 +42,14 @@ bool queue_push(struct _queue* self, void* obj)
void * obj_new = malloc(self->_obj_size); void * obj_new = malloc(self->_obj_size);
if (obj_new == NULL) if (obj_new == NULL)
{ {
return false; goto done;
} }
memmove(obj_new, obj, self->_obj_size); memmove(obj_new, obj, self->_obj_size);
struct _queue_node* node_new = (struct _queue_node*)malloc(sizeof(struct _queue_node)); struct _queue_node* node_new = (struct _queue_node*)malloc(sizeof(struct _queue_node));
if(node_new == NULL) if(node_new == NULL)
{ {
return false; goto done1;
} }
node_new->obj = obj_new; node_new->obj = obj_new;
node_new->next = NULL; node_new->next = NULL;
@ -41,7 +65,12 @@ bool queue_push(struct _queue* self, void* obj)
self->_back = node_new; self->_back = node_new;
} }
self->_size++; self->_size++;
return true; return true;
done1:
free(obj_new);
done:
return false;
} }
bool queue_pop(struct _queue* self, void* obj) bool queue_pop(struct _queue* self, void* obj)

View File

@ -40,10 +40,9 @@ static void test_queue_init(void)
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));
queue_free(&queue); queue_free(&queue);
queue_init2(queue, sizeof(int), 1);
} }
static void test_queue_push(void) static void test_queue_push(void)
{ {
int temp = 0; int temp = 0;
@ -59,13 +58,55 @@ static void test_queue_push(void)
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
{ {
TEST_ASSERT_TRUE(queue->push(queue, &data[i])); TEST_ASSERT_TRUE(queue->push(queue, &data[i]));
TEST_ASSERT_EQUAL_INT(i + 1, queue->size(queue));
TEST_ASSERT_TRUE(queue->front(queue, &temp));
TEST_ASSERT_EQUAL_INT(data[0], temp);
TEST_ASSERT_TRUE(queue->back(queue, &temp));
TEST_ASSERT_EQUAL_INT(data[i], temp);
} }
queue_free(&queue); queue_free(&queue);
// ------------------------------ // ------------------------------
queue = queue_new(); queue = queue_new();
queue_init2(queue, sizeof(int), 10); queue_init2(queue, sizeof(int), len);
for(i = 0; i < len; i++)
{
TEST_ASSERT_TRUE(queue->push(queue, &data[i]));
TEST_ASSERT_EQUAL_INT(i + 1, queue->size(queue));
TEST_ASSERT_TRUE(queue->front(queue, &temp));
TEST_ASSERT_EQUAL_INT(data[0], temp);
TEST_ASSERT_TRUE(queue->back(queue, &temp));
TEST_ASSERT_EQUAL_INT(data[i], temp);
}
queue_free(&queue);
// ------------------------------
// if capacity is less than data len
uint32_t capacity = len - 1;
queue = queue_new();
queue_init2(queue, sizeof(int), capacity);
for(i = 0; i < len; i++)
{
if(i == capacity - 1)
{
TEST_ASSERT_TRUE(queue->push(queue, &data[i]));
TEST_ASSERT_EQUAL_INT(i + 1, queue->size(queue));
TEST_ASSERT_TRUE(queue->front(queue, &temp));
TEST_ASSERT_EQUAL_INT(data[0], temp);
TEST_ASSERT_TRUE(queue->back(queue, &temp));
TEST_ASSERT_EQUAL_INT(data[i], temp);
}
else
{
}
}
queue_free(&queue); queue_free(&queue);
} }
@ -313,6 +354,7 @@ void test_queue(void)
// TEST_MESSAGE("----- test_queue -----"); // TEST_MESSAGE("----- test_queue -----");
RUN_TEST(test_queue_new); RUN_TEST(test_queue_new);
RUN_TEST(test_queue_init); RUN_TEST(test_queue_init);
RUN_TEST(test_queue_push);
RUN_TEST(test_queue_num); RUN_TEST(test_queue_num);
RUN_TEST(test_queue_struct); RUN_TEST(test_queue_struct);