RMUL2025/lib/one-message/om/test/om_test_base.c

151 lines
3.2 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "om.h"
#include "om_test.h"
START_TEST(_MALLOC) {
void* ptr = NULL;
ptr = om_malloc(sizeof(int));
ck_assert_msg(ptr, "内存分配失败");
om_free(ptr);
}
END_TEST
START_TEST(_MUTEX) {
om_mutex_t ptr;
om_mutex_init(&ptr);
om_mutex_lock(&ptr);
om_mutex_unlock(&ptr);
if ((om_mutex_trylock(&ptr)) == OM_OK) {
om_mutex_unlock(&ptr);
} else {
ck_assert_msg(false, "解锁失败");
}
om_mutex_lock(&ptr);
if (om_mutex_trylock(&ptr) != OM_OK) {
om_mutex_unlock(&ptr);
} else {
ck_assert_msg(false, "加锁失败");
}
om_mutex_delete(&ptr);
}
END_TEST
START_TEST(_FIFO) {
om_fifo_t fifo;
char data[10], buff[10];
om_fifo_create(&fifo, data, 10, sizeof(char));
for (int i = 0; i < 8; i++) {
om_fifo_write(&fifo, &i);
om_fifo_pop(&fifo);
}
for (int i = 0; i < 4; i++) {
om_fifo_write(&fifo, &i);
}
for (int i = 0; i < 4; i++) {
char tmp = 0;
om_fifo_jump_peek(&fifo, i, &tmp);
ck_assert_msg(tmp == i, "数据损坏,应为%d实际为%d", i, tmp);
}
void* tmp = NULL;
for (int i = 0; i < 100; i++) {
tmp = om_fifo_foreach_dist(&fifo, tmp);
if (tmp == NULL) {
break;
}
ck_assert_msg(*((char*)tmp) == i, "数据损坏,应为%d实际为%d", i,
*((char*)tmp));
}
for (int i = 0; i < 4; i++) {
om_fifo_read(&fifo, buff);
}
for (int i = 0; i < 10; i++) {
char data = '0' + i;
om_fifo_write(&fifo, &data);
}
for (int i = 0; i < 10; i++) {
char data = '0' + i, tmp = 0;
om_fifo_read(&fifo, &tmp);
ck_assert_msg(data == tmp, "队列数据损坏。应为:%d 实际:%d", data, tmp);
}
for (int i = 0; i < 10; i++) {
buff[i] = '0' + i;
}
om_fifo_writes(&fifo, buff, 10);
for (int i = 0; i < 10; i++) {
buff[i] = 0;
}
ck_assert_msg(fifo.is_full, "队列未满");
ck_assert_msg(om_fifo_write(&fifo, "0") == OM_ERROR_FULL, "队列未满");
om_fifo_reads(&fifo, buff, 10);
for (int i = 0; i < 10; i++) {
char data = '0' + i;
ck_assert_msg(data == buff[i], "批量读写第%d个数据损坏。应为%d 实际:%d",
i, data, buff[i]);
}
}
END_TEST
START_TEST(_RBT) {
RBT_ROOT(rbt);
om_rbt_node_t node[50] = {};
for (int i = 0; i < 50; i++) {
char* tmp = malloc(50);
memset(tmp, 0, 50);
tmp[0] = i + 'A';
node[i].key = tmp;
om_rbtree_insert(&rbt, &node[i]);
}
om_rbt_node_t* tmp = NULL;
for (int i = 0; i < 50; i++) {
tmp = om_rbtree_foreach_disc(&rbt, tmp);
ck_assert_msg(tmp->key[0] == 'A' + i, "遍历第%d个数据错误为%d", i,
tmp->key[0] - 'A');
}
}
END_TEST
Suite* make_om_base_suite(void) {
Suite* om_base = suite_create("底层API测试");
TCase* tc_malloc = tcase_create("内存分配测试");
suite_add_tcase(om_base, tc_malloc);
tcase_add_test(tc_malloc, _MALLOC);
TCase* tc_mutex = tcase_create("互斥锁测试");
suite_add_tcase(om_base, tc_mutex);
tcase_add_test(tc_mutex, _MUTEX);
TCase* tc_fifo = tcase_create("队列测试");
suite_add_tcase(om_base, tc_fifo);
tcase_add_test(tc_fifo, _FIFO);
TCase* tc_rbt = tcase_create("红黑树测试");
suite_add_tcase(om_base, tc_rbt);
tcase_add_test(tc_rbt, _RBT);
return om_base;
}