223 lines
5.2 KiB
C
223 lines
5.2 KiB
C
|
#include <CUnit/Basic.h>
|
||
|
#include <stdio.h>
|
||
|
#include <stdbool.h>
|
||
|
#include <ringbuffer.h>
|
||
|
|
||
|
|
||
|
// #define DEBUG
|
||
|
|
||
|
ringbuffer_t rb;
|
||
|
|
||
|
|
||
|
void printRingbuffer(ringbuffer_t *rb) {
|
||
|
printf("Ringbuffer:\n");
|
||
|
printf(" Size: %u\n", rb->bufferSize);
|
||
|
printf(" ReadIdx: %u\n", rb->bufferReadIdx);
|
||
|
printf(" WriteIdx: %u\n", rb->bufferWriteIdx);
|
||
|
|
||
|
for (uint32_t i = 0; i < rb->bufferSize; i++) {
|
||
|
printf("%02x ", rb->buffer[i]);
|
||
|
}
|
||
|
printf("\n");
|
||
|
}
|
||
|
|
||
|
int init_suite_ringbuffer(void) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
int clean_suite_ringbuffer(void) {
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void testRingbuffer0() {
|
||
|
#ifdef DEBUG
|
||
|
printf("Initialize ringbuffer\n");
|
||
|
#endif
|
||
|
ringbufferInit(&rb, 16);
|
||
|
#ifdef DEBUG
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 0);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 0);
|
||
|
}
|
||
|
|
||
|
void testRingbuffer1() {
|
||
|
#ifdef DEBUG
|
||
|
printf("\nPut 5 chars in buffer\n");
|
||
|
#endif
|
||
|
int r = ringbufferPut(&rb, "abcde", 5);
|
||
|
#ifdef DEBUG
|
||
|
printf("r = %d\n", r);
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r == 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 5);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 0);
|
||
|
}
|
||
|
|
||
|
void testRingbuffer2() {
|
||
|
#ifdef DEBUG
|
||
|
printf("\nPut 5 chars in buffer\n");
|
||
|
#endif
|
||
|
int r = ringbufferPut(&rb, "fghij", 5);
|
||
|
#ifdef DEBUG
|
||
|
printf("r = %d\n", r);
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r == 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 10);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 0);
|
||
|
}
|
||
|
|
||
|
void testRingbuffer3() {
|
||
|
#ifdef DEBUG
|
||
|
printf("\nPut 5 chars in buffer\n");
|
||
|
#endif
|
||
|
int r = ringbufferPut(&rb, "klmno", 5);
|
||
|
#ifdef DEBUG
|
||
|
printf("r = %d\n", r);
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r == 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 15);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 0);
|
||
|
}
|
||
|
|
||
|
void testRingbuffer4() {
|
||
|
#ifdef DEBUG
|
||
|
printf("\nPut 5 chars in buffer\n");
|
||
|
#endif
|
||
|
int r = ringbufferPut(&rb, "pqrst", 5);
|
||
|
#ifdef DEBUG
|
||
|
printf("r = %d\n", r);
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
CU_ASSERT(r == -1);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 15);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 0);
|
||
|
}
|
||
|
|
||
|
void testRingbuffer5() {
|
||
|
#ifdef DEBUG
|
||
|
printf("\nRead one char from buffer\n");
|
||
|
#endif
|
||
|
int r = ringbufferGetOne(&rb);
|
||
|
#ifdef DEBUG
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r >= 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 15);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 1);
|
||
|
|
||
|
uint8_t rr = (uint8_t) r;
|
||
|
CU_ASSERT(rr == 'a');
|
||
|
}
|
||
|
|
||
|
void testRingbuffer6() {
|
||
|
#ifdef DEBUG
|
||
|
printf("\nRead some char from buffer\n");
|
||
|
#endif
|
||
|
int r = ringbufferGetOne(&rb);
|
||
|
#ifdef DEBUG
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r >= 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 15);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 2);
|
||
|
|
||
|
uint8_t rr = (uint8_t) r;
|
||
|
CU_ASSERT(rr == 'b');
|
||
|
|
||
|
r = ringbufferGetOne(&rb);
|
||
|
#ifdef DEBUG
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r >= 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 15);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 3);
|
||
|
|
||
|
rr = (uint8_t) r;
|
||
|
CU_ASSERT(rr == 'c');
|
||
|
|
||
|
r = ringbufferGetOne(&rb);
|
||
|
#ifdef DEBUG
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(r >= 0);
|
||
|
CU_ASSERT(rb.buffer != NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 16);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 15);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 4);
|
||
|
|
||
|
rr = (uint8_t) r;
|
||
|
CU_ASSERT(rr == 'd');
|
||
|
}
|
||
|
|
||
|
void testRingbuffer99() {
|
||
|
#ifdef DEBUG
|
||
|
printf("De-Initialize ringbuffer\n");
|
||
|
#endif
|
||
|
ringbufferFree(&rb);
|
||
|
#ifdef DEBUG
|
||
|
printRingbuffer(&rb);
|
||
|
#endif
|
||
|
|
||
|
CU_ASSERT(rb.buffer == NULL);
|
||
|
CU_ASSERT(rb.bufferSize == 0);
|
||
|
CU_ASSERT(rb.bufferWriteIdx == 0);
|
||
|
CU_ASSERT(rb.bufferReadIdx == 0);
|
||
|
}
|
||
|
|
||
|
int main() {
|
||
|
if (CUE_SUCCESS != CU_initialize_registry())
|
||
|
return CU_get_error();
|
||
|
|
||
|
CU_pSuite ringbufferSuite = CU_add_suite("Suite_Ringbuffer", init_suite_ringbuffer, clean_suite_ringbuffer);
|
||
|
if (NULL == ringbufferSuite) {
|
||
|
CU_cleanup_registry();
|
||
|
return CU_get_error();
|
||
|
}
|
||
|
|
||
|
if ((NULL == CU_add_test(ringbufferSuite, "test 0 of ringbuffer, init", testRingbuffer0)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 1 of ringbuffer", testRingbuffer1)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 2 of ringbuffer", testRingbuffer2)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 3 of ringbuffer", testRingbuffer3)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 4 of ringbuffer", testRingbuffer4)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 5 of ringbuffer", testRingbuffer5)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 6 of ringbuffer", testRingbuffer6)) ||
|
||
|
(NULL == CU_add_test(ringbufferSuite, "test 99 of ringbuffer, free", testRingbuffer99)) ||
|
||
|
0 ) {
|
||
|
CU_cleanup_registry();
|
||
|
return CU_get_error();
|
||
|
}
|
||
|
|
||
|
CU_basic_set_mode(CU_BRM_VERBOSE);
|
||
|
CU_basic_run_tests();
|
||
|
CU_cleanup_registry();
|
||
|
return CU_get_error();
|
||
|
}
|