Added test to wrap head and tail of ringbuffer to silence naysayers.
This commit is contained in:
+65
-33
@@ -192,9 +192,58 @@ void Ringbuf_Init(
|
|||||||
#ifdef TEST
|
#ifdef TEST
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <limits.h>
|
||||||
#include "ctest.h"
|
#include "ctest.h"
|
||||||
|
|
||||||
|
/* test the ring buffer */
|
||||||
|
void testRingAroundBuffer(
|
||||||
|
Test * pTest,
|
||||||
|
RING_BUFFER *test_buffer,
|
||||||
|
uint8_t * data_element,
|
||||||
|
unsigned element_size,
|
||||||
|
unsigned element_count)
|
||||||
|
{
|
||||||
|
uint8_t *test_data;
|
||||||
|
unsigned index;
|
||||||
|
unsigned data_index;
|
||||||
|
unsigned count;
|
||||||
|
unsigned dummy;
|
||||||
|
bool status;
|
||||||
|
|
||||||
|
ct_test(pTest, Ringbuf_Empty(test_buffer));
|
||||||
|
/* test the ring around the buffer */
|
||||||
|
for (index = 0; index < element_count; index++) {
|
||||||
|
for (count = 1; count < 4; count++) {
|
||||||
|
dummy = index * count;
|
||||||
|
for (data_index = 0; data_index < element_size; data_index++) {
|
||||||
|
data_element[data_index] = dummy;
|
||||||
|
}
|
||||||
|
status = Ringbuf_Put(test_buffer, data_element);
|
||||||
|
ct_test(pTest, status == true);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (count = 1; count < 4; count++) {
|
||||||
|
dummy = index * count;
|
||||||
|
test_data = Ringbuf_Get_Front(test_buffer);
|
||||||
|
ct_test(pTest, test_data);
|
||||||
|
if (test_data) {
|
||||||
|
for (data_index = 0; data_index < element_size; data_index++) {
|
||||||
|
ct_test(pTest, test_data[data_index] == dummy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test_data = Ringbuf_Pop_Front(test_buffer);
|
||||||
|
ct_test(pTest, test_data);
|
||||||
|
if (test_data) {
|
||||||
|
for (data_index = 0; data_index < element_size; data_index++) {
|
||||||
|
ct_test(pTest, test_data[data_index] == dummy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ct_test(pTest, Ringbuf_Empty(test_buffer));
|
||||||
|
}
|
||||||
|
|
||||||
/* test the ring buffer */
|
/* test the ring buffer */
|
||||||
void testRingBuf(
|
void testRingBuf(
|
||||||
Test * pTest,
|
Test * pTest,
|
||||||
@@ -207,8 +256,6 @@ void testRingBuf(
|
|||||||
uint8_t *test_data;
|
uint8_t *test_data;
|
||||||
unsigned index;
|
unsigned index;
|
||||||
unsigned data_index;
|
unsigned data_index;
|
||||||
unsigned count;
|
|
||||||
unsigned dummy;
|
|
||||||
bool status;
|
bool status;
|
||||||
|
|
||||||
Ringbuf_Init(&test_buffer, data_store, element_size, element_count);
|
Ringbuf_Init(&test_buffer, data_store, element_size, element_count);
|
||||||
@@ -272,38 +319,23 @@ void testRingBuf(
|
|||||||
}
|
}
|
||||||
ct_test(pTest, Ringbuf_Empty(&test_buffer));
|
ct_test(pTest, Ringbuf_Empty(&test_buffer));
|
||||||
|
|
||||||
/* test the ring around the buffer */
|
testRingAroundBuffer(
|
||||||
for (index = 0; index < element_count; index++) {
|
pTest,
|
||||||
for (count = 1; count < 4; count++) {
|
&test_buffer,
|
||||||
dummy = index * count;
|
data_element,
|
||||||
for (data_index = 0; data_index < element_size; data_index++) {
|
element_size,
|
||||||
data_element[data_index] = dummy;
|
element_count);
|
||||||
}
|
|
||||||
status = Ringbuf_Put(&test_buffer, data_element);
|
|
||||||
ct_test(pTest, status == true);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (count = 1; count < 4; count++) {
|
/* adjust the internal index of Ringbuf to test unsigned wrapping */
|
||||||
dummy = index * count;
|
test_buffer.head = UINT_MAX-1;
|
||||||
test_data = Ringbuf_Get_Front(&test_buffer);
|
test_buffer.tail = UINT_MAX-1;
|
||||||
ct_test(pTest, test_data);
|
|
||||||
if (test_data) {
|
|
||||||
for (data_index = 0; data_index < element_size; data_index++) {
|
|
||||||
ct_test(pTest, test_data[data_index] == dummy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
test_data = Ringbuf_Pop_Front(&test_buffer);
|
|
||||||
ct_test(pTest, test_data);
|
|
||||||
if (test_data) {
|
|
||||||
for (data_index = 0; data_index < element_size; data_index++) {
|
|
||||||
ct_test(pTest, test_data[data_index] == dummy);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
ct_test(pTest, Ringbuf_Empty(&test_buffer));
|
|
||||||
|
|
||||||
|
testRingAroundBuffer(
|
||||||
|
pTest,
|
||||||
|
&test_buffer,
|
||||||
|
data_element,
|
||||||
|
element_size,
|
||||||
|
element_count);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user