Skip to content

Commit 267e9b1

Browse files
committed
added more tests for ring buffer with strings
1 parent 3f49595 commit 267e9b1

File tree

1 file changed

+185
-15
lines changed

1 file changed

+185
-15
lines changed

tests/string_buffer.cpp

Lines changed: 185 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
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

1011
protected:
1112

12-
CircularBuffer<std::string> test{TEST_BUFFER_SIZE};
13+
CircularBuffer<std::string> test_buff{TEST_BUFFER_SIZE};
1314

1415
};
1516

1617
TEST_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

2122
TEST_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

Comments
 (0)