Files
root ca13734bf0 Add full automotive RTOS project
Add kernel (Cortex-M0/M3/M4, Tricore, S32K, RISC-V ports), drivers,
middleware (CAN stack, diagnostics, safety), applications, board
support, build/test tooling, and documentation.
2026-08-23 03:35:29 -04:00

130 lines
3.0 KiB
C

/**
* @file test_queue.c
* @brief Unit tests for message queue
*/
#include "unity.h"
#include "kernel.h"
#include "queue.h"
#include <string.h>
/* Test queue */
static Queue_t test_queue;
static uint8_t queue_buffer[256];
/* Test data */
typedef struct {
uint32_t id;
uint8_t data[8];
} TestMessage_t;
/* Setup */
void setUp(void) {
kernel_init();
queue_create(&test_queue, queue_buffer, sizeof(TestMessage_t), 10);
}
/* Teardown */
void tearDown(void) {
kernel_stop();
queue_delete(&test_queue);
}
/* ============================================================================
* Test Cases
* ============================================================================ */
/**
* @brief Test queue creation
*/
void test_queue_create(void) {
TEST_ASSERT_EQUAL(0, queue_get_count(&test_queue));
}
/**
* @brief Test queue send and receive
*/
void test_queue_send_receive(void) {
TestMessage_t send_msg = {
.id = 1,
.data = {1, 2, 3, 4, 5, 6, 7, 8}
};
TestMessage_t recv_msg;
/* Send message */
TEST_ASSERT_EQUAL(KERNEL_OK, queue_send(&test_queue, &send_msg, 100));
TEST_ASSERT_EQUAL(1, queue_get_count(&test_queue));
/* Receive message */
TEST_ASSERT_EQUAL(KERNEL_OK, queue_receive(&test_queue, &recv_msg, 100));
TEST_ASSERT_EQUAL(0, queue_get_count(&test_queue));
/* Verify data */
TEST_ASSERT_EQUAL(send_msg.id, recv_msg.id);
TEST_ASSERT_EQUAL_MEMORY(send_msg.data, recv_msg.data, 8);
}
/**
* @brief Test queue full condition
*/
void test_queue_full(void) {
TestMessage_t msg = {0};
/* Fill queue */
for (int i = 0; i < 10; i++) {
msg.id = i;
TEST_ASSERT_EQUAL(KERNEL_OK, queue_send(&test_queue, &msg, 0));
}
TEST_ASSERT_EQUAL(10, queue_get_count(&test_queue));
/* Try to send when full */
TEST_ASSERT_EQUAL(KERNEL_TIMEOUT, queue_send(&test_queue, &msg, 0));
}
/**
* @brief Test queue empty condition
*/
void test_queue_empty(void) {
TestMessage_t msg;
/* Try to receive from empty queue */
TEST_ASSERT_EQUAL(KERNEL_TIMEOUT, queue_receive(&test_queue, &msg, 0));
}
/**
* @brief Test FIFO ordering
*/
void test_queue_fifo(void) {
TestMessage_t send_msg;
TestMessage_t recv_msg;
/* Send multiple messages */
for (int i = 0; i < 5; i++) {
send_msg.id = i;
TEST_ASSERT_EQUAL(KERNEL_OK, queue_send(&test_queue, &send_msg, 100));
}
/* Receive in order */
for (int i = 0; i < 5; i++) {
TEST_ASSERT_EQUAL(KERNEL_OK, queue_receive(&test_queue, &recv_msg, 100));
TEST_ASSERT_EQUAL(i, recv_msg.id);
}
}
/* ============================================================================
* Test Runner
* ============================================================================ */
int main(void) {
UNITY_BEGIN();
RUN_TEST(test_queue_create);
RUN_TEST(test_queue_send_receive);
RUN_TEST(test_queue_full);
RUN_TEST(test_queue_empty);
RUN_TEST(test_queue_fifo);
return UNITY_END();
}