Fawkes API  Fawkes Development Version
test_circular_buffer.cpp
1 /***************************************************************************
2  * test_circular_buffer.cpp - CircularBuffer Unit Test
3  *
4  * Created: Fri Aug 15 16:27:42 2014
5  * Copyright 2014 Till Hofmann
6  *
7  ****************************************************************************/
8 
9 /* This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Library General Public License for more details.
18  *
19  * Read the full text in the LICENSE.GPL file in the doc directory.
20  */
21 
22 #include <gtest/gtest.h>
23 
24 #include <core/utils/circular_buffer.h>
25 #include <stdexcept>
26 
27 using namespace fawkes;
28 
29 
30 TEST(CircularBufferTest, ElementAccess)
31 {
32  CircularBuffer<int> buffer(1000);
33  for (int i = 0; i < 1000; i++) {
34  buffer.push_back(i);
35  }
36  for (int i = 0; i < 1000; i++) {
37  ASSERT_EQ(i, buffer[i]);
38  ASSERT_EQ(i, buffer.at(i));
39  }
40 }
41 
42 TEST(CircularBufferTest, ElementDeletion)
43 {
44  CircularBuffer<int> buffer(1);
45  buffer.push_back(1);
46  buffer.push_back(2);
47  ASSERT_EQ(1, buffer.size());
48  ASSERT_EQ(2, buffer[0]);
49 }
50 
51 TEST(CircularBufferTest, OutOfMaxRange)
52 {
53  CircularBuffer<int> buffer(1);
54  int i;
55  ASSERT_NO_THROW(i = buffer[1]);
56  ASSERT_THROW(i = buffer.at(1), std::out_of_range);
57 }
58 
59 TEST(CircularBufferTest, OutOfRange)
60 {
61  CircularBuffer<int> buffer(2);
62  buffer.push_back(1);
63  int i;
64  ASSERT_NO_THROW(i = buffer[1]);
65  ASSERT_THROW(i = buffer.at(1), std::out_of_range);
66 }
67 
68 
69 TEST(CircularBufferTest, ConstValues)
70 {
71  CircularBuffer<int> buffer(5);
72  // buffer[0] = 2; // won't compile
73  CircularBuffer<int>::iterator it = buffer.begin();
74  // *it = 2; // won't compile
75 
76 }
77 
78 TEST(CircularBufferTest, CopyConstructor)
79 {
80  CircularBuffer<int> b1(5);
81  b1.push_back(1);
82  b1.push_back(2);
83  CircularBuffer<int> b2(b1);
84  ASSERT_EQ(5, b2.get_max_size());
85  ASSERT_EQ(1, b2[0]);
86  ASSERT_EQ(2, b2[1]);
87  b2.push_back(3);
88  ASSERT_EQ(3, b2[2]);
89  ASSERT_EQ(1, b1[0]);
90  ASSERT_EQ(2, b1[1]);
91  ASSERT_THROW(b1.at(2), std::out_of_range);
92 }
Fawkes library namespace.
const_iterator iterator
iterator is also const, we don&#39;t want to manipulate any elements
Circular buffer with a fixed size.