38 #include <gtest/gtest.h>
44 TEST(CircularQueueTest, Empty)
46 const auto cq_size = 8;
50 ASSERT_EQ(cq.
size(), 0);
51 ASSERT_TRUE(cq.
empty());
56 TEST(CircularQueueTest, HeadTailEmpty)
58 const auto cq_size = 8;
60 ASSERT_EQ(cq.
head(), (cq.
tail() + 1) % cq_size);
69 TEST(CircularQueueTest, AddingElements)
71 const auto cq_size = 8;
74 const auto first_element = 0xAAAAAAAA;
76 ASSERT_EQ(cq.
front(), first_element);
77 ASSERT_EQ(cq.
back(), first_element);
79 const auto second_element = 0x55555555;
81 ASSERT_EQ(cq.
front(), first_element);
82 ASSERT_EQ(cq.
back(), second_element);
84 ASSERT_EQ(cq.
size(), 2);
92 TEST(CircularQueueTest, RemovingElements)
94 const auto cq_size = 8;
98 const auto first_element = 0xAAAAAAAA;
102 const auto second_element = 0x55555555;
105 auto initial_head = cq.
head();
106 auto initial_tail = cq.
tail();
110 ASSERT_EQ(cq.
head(), initial_head + 1);
111 ASSERT_EQ(cq.
tail(), initial_tail);
114 ASSERT_EQ(cq.
head(), initial_head + 2);
115 ASSERT_EQ(cq.
tail(), initial_tail);
117 ASSERT_EQ(cq.
size(), 0);
118 ASSERT_TRUE(cq.
empty());
129 const auto cq_size = 8;
132 const auto value = 0xAAAAAAAA;
133 for (
auto idx = 0; idx < cq_size; idx++) {
137 ASSERT_TRUE(cq.
full());
138 ASSERT_EQ(cq.
head(), (cq.
tail() + 1) % cq_size);
147 TEST(CircularQueueTest, BeginEnd)
149 const auto cq_size = 8;
155 const auto first_value = 0xAAAAAAAA;
156 const auto second_value = 0x55555555;
162 ASSERT_EQ(cq.
begin() + 2, cq.
end());
170 TEST(CircularQueueTest, BeginFrontEndBack)
172 const auto cq_size = 8;
175 const auto front_value = 0xAAAAAAAA;
176 const auto back_value = 0x55555555;
182 ASSERT_EQ(*(cq.
end() - 1), cq.
back());
189 TEST(CircularQueueTest, IteratorsOp)
191 const auto cq_size = 8;
194 const auto first_value = 0xAAAAAAAA;
195 const auto second_value = 0x55555555;
199 auto it_1 = cq.
begin();
200 auto it_2 = cq.
begin() + 1;
203 ASSERT_TRUE(it_1 != it_2);
204 ASSERT_FALSE(it_1 == it_2);
205 ASSERT_FALSE(it_1 > it_2);
206 ASSERT_FALSE(it_1 >= it_2);
207 ASSERT_TRUE(it_1 < it_2);
208 ASSERT_TRUE(it_1 <= it_2);
209 ASSERT_EQ(*it_1, first_value);
210 ASSERT_EQ(it_1 + 1, it_2);
211 ASSERT_EQ(it_1, it_2 - 1);
212 ASSERT_EQ(it_2 - it_1, 1);
213 ASSERT_EQ(it_1 - it_2, -1);
216 ASSERT_EQ(++temp_it, it_2);
217 ASSERT_EQ(--temp_it, it_1);
218 ASSERT_EQ(temp_it++, it_1);
219 ASSERT_EQ(temp_it, it_2);
220 ASSERT_EQ(temp_it--, it_2);
221 ASSERT_EQ(temp_it, it_1);
230 TEST(CircularQueueTest, FullLoop)
232 const auto cq_size = 8;
237 auto starting_it = cq.
begin();
238 auto ending_it = starting_it + cq_size;
240 ASSERT_EQ(ending_it - starting_it, cq_size);
241 ASSERT_TRUE(starting_it != ending_it);
250 TEST(CircularQueueTest, MultipleRound)
252 const auto cq_size = 8;
256 auto items_added = cq_size * 3;
257 for (
auto idx = 0; idx < items_added; idx++) {
261 auto starting_it = cq.
begin();
262 auto ending_it = cq.
end();
264 ASSERT_EQ(ending_it - starting_it, cq_size);