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
btstack_min(uint32_t a,uint32_t b)8 uint32_t btstack_min(uint32_t a, uint32_t b){
9 return a < b ? a : b;
10 }
11
TEST_GROUP(RingBuffer)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
TEST(RingBuffer,EmptyBuffer)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
TEST(RingBuffer,WriteBuffer)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
TEST(RingBuffer,WriteFullBuffer)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
TEST(RingBuffer,ReadWrite)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
TEST(RingBuffer,ReadWriteChunks)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
main(int argc,const char * argv[])96 int main (int argc, const char * argv[]){
97 return CommandLineTestRunner::RunAllTests(argc, argv);
98 }