xref: /btstack/test/ring_buffer/btstack_ring_buffer_test.cpp (revision c589a9bb896bd3ca6ce0b0556b913c50596ccdf8)
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 }