11#include " circular_buffer.h"
22#include < iostream>
33#include < string.h>
4+ #include < utility>
45#include " gtest/gtest.h"
56
67#define TEST_BUFFER_SIZE 100
@@ -9,29 +10,198 @@ class CircularBufferTest : public ::testing::Test{
910
1011protected:
1112
12- CircularBuffer<std::string> test {TEST_BUFFER_SIZE};
13+ CircularBuffer<std::string> test_buff {TEST_BUFFER_SIZE};
1314
1415};
1516
1617TEST_F (CircularBufferTest, CapacityTest){
17- EXPECT_EQ (TEST_BUFFER_SIZE, test .capacity ());
18- EXPECT_FALSE (test .capacity () == 0 );
18+ EXPECT_EQ (TEST_BUFFER_SIZE, test_buff .capacity ());
19+ EXPECT_FALSE (test_buff .capacity () == 0 );
1920}
2021
2122TEST_F (CircularBufferTest, EmptyTest){
22- EXPECT_TRUE (test.empty ());
23- test.push_back (" string 1" );
24- test.push_back (" string 2" );
25- EXPECT_FALSE (test.empty ());
26- test.pop_front ();
27- test.pop_front ();
28- EXPECT_TRUE (test.empty ());
29- for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
30- test.push_back (" string" + std::to_string (i));
31- EXPECT_FALSE (test.empty ());
23+ EXPECT_TRUE (test_buff.empty ());
24+ test_buff.push_back (" string 1" );
25+ test_buff.push_back (" string 2" );
26+ EXPECT_FALSE (test_buff.empty ());
27+ test_buff.pop_front ();
28+ test_buff.pop_front ();
29+ EXPECT_TRUE (test_buff.empty ());
30+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
31+ test_buff.push_back (" string" + std::to_string (i));
32+ EXPECT_FALSE (test_buff.empty ());
33+
34+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
35+ test_buff.pop_front ();
36+ EXPECT_TRUE (test_buff.empty ());
37+ }
38+
39+ TEST_F (CircularBufferTest, SizeTest){
40+ EXPECT_TRUE (test_buff.empty ());
41+ test_buff.push_back (" string 1" );
42+ test_buff.push_back (" string 2" );
43+ EXPECT_EQ (test_buff.size (), 2 );
44+ test_buff.pop_front ();
45+ test_buff.pop_front ();
46+ EXPECT_EQ (test_buff.size (), 0 );
47+ // create full buffer
48+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
49+ test_buff.push_back (" string" + std::to_string (i));
50+ EXPECT_EQ (test_buff.size (), TEST_BUFFER_SIZE);
51+ // add more entries to overwrite front
52+ test_buff.push_back (" string" + std::to_string (TEST_BUFFER_SIZE + 1 ));
53+ test_buff.push_back (" string" + std::to_string (TEST_BUFFER_SIZE + 2 ));
54+ EXPECT_EQ (test_buff.size (), TEST_BUFFER_SIZE);
55+ // manually empty buffer
56+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
57+ test_buff.pop_front ();
58+ EXPECT_EQ (test_buff.size (), 0 );
59+ }
60+
61+ TEST_F (CircularBufferTest, ClearTest){
62+ EXPECT_TRUE (test_buff.empty ());
63+ // create full buffer
64+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
65+ test_buff.push_back (" string" + std::to_string (i));
66+ EXPECT_FALSE (test_buff.empty ());
67+ // add more entries to overwrite front
68+ test_buff.push_back (" string" + std::to_string (TEST_BUFFER_SIZE + 1 ));
69+ EXPECT_FALSE (test_buff.empty ());
70+ // clear buffer
71+ test_buff.clear ();
72+ // check size and empty flags after clearing
73+ EXPECT_TRUE (test_buff.empty ());
74+ EXPECT_EQ (test_buff.size (), 0 );
75+
76+ }
77+
78+ TEST_F (CircularBufferTest, FullTest){
79+ EXPECT_FALSE (test_buff.full ());
80+ // create full buffer
81+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
82+ test_buff.push_back (" string" + std::to_string (i));
83+ EXPECT_TRUE (test_buff.full ());
84+ // add more entries to overwrite front
85+ test_buff.push_back (" string" + std::to_string (TEST_BUFFER_SIZE + 1 ));
86+ EXPECT_TRUE (test_buff.full ());
87+ // remove front element
88+ test_buff.pop_front ();
89+ EXPECT_FALSE (test_buff.full ());
90+ // add one elememt to make the buffer full
91+ test_buff.push_back (" string" + std::to_string (TEST_BUFFER_SIZE + 2 ));
92+ EXPECT_TRUE (test_buff.full ());
93+ }
94+
95+
96+ TEST_F (CircularBufferTest, PushBackTest){
97+ // push back individual elements
98+ test_buff.push_back (" string1" );
99+ EXPECT_EQ (test_buff.size (), 1 );
100+ test_buff.push_back (" string2" );
101+ EXPECT_EQ (test_buff.size (), 2 );
102+ // create full buffer
103+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
104+ test_buff.push_back (" string" + std::to_string (i));
105+
106+ // test move semantics in push_back
107+ std::string string_to_move{" This string is moved" };
108+ test_buff.push_back (std::move (string_to_move));
109+ EXPECT_TRUE (string_to_move.empty ());
110+ // create full buffer
111+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++){
112+ std::string temp_string{" This string is moved" };
113+ test_buff.push_back (std::move (temp_string));
114+ EXPECT_TRUE (temp_string.empty ());
115+ }
116+ EXPECT_TRUE (test_buff.full ());
117+ EXPECT_EQ (test_buff.size (), TEST_BUFFER_SIZE);
118+
119+ }
120+
121+
122+ TEST_F (CircularBufferTest, PopFrontTest){
123+ // push back & pop individual elements
124+ test_buff.push_back (" string1" );
125+ EXPECT_EQ (test_buff.size (), 1 );
126+ test_buff.pop_front ();
127+ EXPECT_EQ (test_buff.size (), 0 );
32128
129+ // create full buffer
130+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
131+ test_buff.push_back (" string" + std::to_string (i));
132+ // pop all elements
133+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
134+ test_buff.pop_front ();
135+ EXPECT_TRUE (test_buff.empty ());
136+ EXPECT_EQ (test_buff.size (), 0 );
137+ // try pop on empty buffer
138+ try {
139+ test_buff.pop_front ();
140+ FAIL () << " Expected std::length_error" ;
141+ }
142+ catch (const std::length_error& err){
143+ EXPECT_EQ (err.what (), std::string (" pop_front called on empty buffer" ));
144+ }
145+ }
146+
147+
148+ TEST_F (CircularBufferTest, FrontTest){
149+ // push back & front for individual elements
150+ test_buff.push_back (" string1" );
151+ test_buff.push_back (" string2" );
152+ EXPECT_EQ (test_buff.size (), 2 );
153+ EXPECT_EQ (test_buff.front (), " string1" );
154+ test_buff.front () = " string2" ;
155+ EXPECT_EQ (test_buff.front (), " string2" );
156+ // create full buffer
157+ for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
158+ test_buff.push_back (" string" + std::to_string (i));
159+ EXPECT_EQ (test_buff.front (), " string0" );
160+ // empty the buffer
161+ test_buff.clear ();
162+ EXPECT_EQ (test_buff.size (), 0 );
163+ // calling front on empty buffer raises exception
164+ try {
165+ test_buff.front () = " string0" ;
166+ FAIL () << " Expected std::length_error" ;
167+ }
168+ catch (const std::length_error& err){
169+ EXPECT_EQ (err.what (), std::string (" front function called on empty buffer" ));
170+ }
171+ }
172+
173+ TEST_F (CircularBufferTest, BackTest){
174+ // push back & front for individual elements
175+ test_buff.push_back (" string1" );
176+ test_buff.push_back (" string2" );
177+ EXPECT_EQ (test_buff.size (), 2 );
178+ EXPECT_EQ (test_buff.back (), " string2" );
179+ test_buff.back () = " string1" ;
180+ EXPECT_EQ (test_buff.back (), " string1" );
181+ // create full buffer
33182 for (int i=0 ; i<TEST_BUFFER_SIZE; i++)
34- test.pop_front ();
35- EXPECT_TRUE (test.empty ());
183+ test_buff.push_back (" string" + std::to_string (i));
184+ EXPECT_EQ (test_buff.back (), " string99" );
185+ // empty the buffer
186+ test_buff.clear ();
187+ EXPECT_EQ (test_buff.size (), 0 );
188+ // calling back on empty buffer raises exception
189+ try {
190+ test_buff.back () = " string0" ;
191+ FAIL () << " Expected std::length_error" ;
192+ }
193+ catch (const std::length_error& err){
194+ EXPECT_EQ (err.what (), std::string (" back function called on empty buffer" ));
195+ }
196+
36197}
37198
199+
200+
201+
202+
203+
204+
205+
206+
207+
0 commit comments