1 #include "CppUTest/TestHarness.h" 2 #include "CppUTest/CommandLineTestRunner.h" 3 #include "btstack_ring_buffer.h" 4 #include "btstack_util.h" 5 6 static uint8_t storage[10]; 7 8 uint32_t btstack_min(uint32_t a, uint32_t b){ 9 return a < b ? a : b; 10 } 11 12 TEST_GROUP(RingBuffer){ 13 btstack_ring_buffer_t ring_buffer; 14 int storage_size; 15 16 void setup(void){ 17 storage_size = sizeof(storage); 18 memset(storage, 0, storage_size); 19 btstack_ring_buffer_init(&ring_buffer, storage, storage_size); 20 } 21 }; 22 23 TEST(RingBuffer, EmptyBuffer){ 24 CHECK_TRUE(btstack_ring_buffer_empty(&ring_buffer)); 25 CHECK_EQUAL(0, btstack_ring_buffer_bytes_available(&ring_buffer)); 26 CHECK_EQUAL(storage_size, btstack_ring_buffer_bytes_free(&ring_buffer)); 27 } 28 29 TEST(RingBuffer, WriteBuffer){ 30 uint8_t test_write_data[] = {1,2,3,4, 5}; 31 int test_data_size = sizeof(test_write_data); 32 uint8_t test_read_data[test_data_size]; 33 34 btstack_ring_buffer_write(&ring_buffer, test_write_data, test_data_size); 35 CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer)); 36 37 uint32_t number_of_bytes_read = 0; 38 memset(test_read_data, 0, test_data_size); 39 btstack_ring_buffer_read(&ring_buffer, test_read_data, test_data_size, &number_of_bytes_read); 40 41 CHECK_EQUAL(0, memcmp(test_write_data, test_read_data, test_data_size)); 42 43 } 44 45 TEST(RingBuffer, WriteFullBuffer){ 46 uint8_t test_write_data[] = {1,2,3,4,5,6,7,8,9,10}; 47 int test_data_size = sizeof(test_write_data); 48 uint8_t test_read_data[test_data_size]; 49 50 btstack_ring_buffer_write(&ring_buffer, test_write_data, test_data_size); 51 CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer)); 52 53 memset(test_read_data, 0, test_data_size); 54 uint32_t number_of_bytes_read = 0; 55 btstack_ring_buffer_read(&ring_buffer, test_read_data, test_data_size, &number_of_bytes_read); 56 57 CHECK_EQUAL(0, memcmp(test_write_data, test_read_data, test_data_size)); 58 } 59 60 61 TEST(RingBuffer, ReadWrite){ 62 uint8_t test_write_data[] = {1,2,3,4}; 63 int test_data_size = sizeof(test_write_data); 64 uint8_t test_read_data[test_data_size]; 65 66 int i; 67 for (i=0;i<30;i++){ 68 btstack_ring_buffer_write(&ring_buffer, test_write_data, test_data_size); 69 CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer)); 70 71 memset(test_read_data, 0, test_data_size); 72 uint32_t number_of_bytes_read = 0; 73 btstack_ring_buffer_read(&ring_buffer, test_read_data, test_data_size, &number_of_bytes_read); 74 CHECK_EQUAL(0, memcmp(test_write_data, test_read_data, test_data_size)); 75 } 76 } 77 78 TEST(RingBuffer, ReadWriteChunks){ 79 uint8_t test_write_data[] = {1,2,3,4,5,6}; 80 int test_data_size = sizeof(test_write_data); 81 int chunk_size = 3; 82 uint8_t test_read_data[chunk_size]; 83 84 btstack_ring_buffer_write(&ring_buffer, test_write_data, test_data_size); 85 CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer)); 86 87 while (test_data_size){ 88 memset(test_read_data, 0, chunk_size); 89 uint32_t number_of_bytes_read = 0; 90 btstack_ring_buffer_read(&ring_buffer, test_read_data, chunk_size, &number_of_bytes_read); 91 test_data_size -= chunk_size; 92 CHECK_EQUAL(test_data_size, btstack_ring_buffer_bytes_available(&ring_buffer)); 93 } 94 } 95 96 int main (int argc, const char * argv[]){ 97 return CommandLineTestRunner::RunAllTests(argc, argv); 98 }