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