From 9492b49c151d19dac8b154567bf09bc8be7ee2e3 Mon Sep 17 00:00:00 2001 From: skarg Date: Sat, 8 Jan 2011 13:16:03 +0000 Subject: [PATCH] Added test to wrap head and tail of ringbuffer to silence naysayers. --- bacnet-stack/src/ringbuf.c | 98 +++++++++++++++++++++++++------------- 1 file changed, 65 insertions(+), 33 deletions(-) diff --git a/bacnet-stack/src/ringbuf.c b/bacnet-stack/src/ringbuf.c index 35a85cba..8a98350c 100644 --- a/bacnet-stack/src/ringbuf.c +++ b/bacnet-stack/src/ringbuf.c @@ -192,9 +192,58 @@ void Ringbuf_Init( #ifdef TEST #include #include - +#include #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 */ void testRingBuf( Test * pTest, @@ -207,8 +256,6 @@ void testRingBuf( uint8_t *test_data; unsigned index; unsigned data_index; - unsigned count; - unsigned dummy; bool status; Ringbuf_Init(&test_buffer, data_store, element_size, element_count); @@ -272,38 +319,23 @@ void testRingBuf( } 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); - } + testRingAroundBuffer( + pTest, + &test_buffer, + data_element, + element_size, + element_count); - 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)); + /* adjust the internal index of Ringbuf to test unsigned wrapping */ + test_buffer.head = UINT_MAX-1; + test_buffer.tail = UINT_MAX-1; + testRingAroundBuffer( + pTest, + &test_buffer, + data_element, + element_size, + element_count); return; }