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 <core/utils/circular_buffer.h>
23 #include <gtest/gtest.h>
24 
25 #include <stdexcept>
26 
27 using namespace fawkes;
28 
29 TEST(CircularBufferTest, ElementAccess)
30 {
31  CircularBuffer<int> buffer(1000);
32  for (int i = 0; i < 1000; i++) {
33  buffer.push_back(i);
34  }
35  for (int i = 0; i < 1000; i++) {
36  ASSERT_EQ(i, buffer[i]);
37  ASSERT_EQ(i, buffer.at(i));
38  }
39 }
40 
41 TEST(CircularBufferTest, ElementDeletion)
42 {
43  CircularBuffer<int> buffer(1);
44  buffer.push_back(1);
45  buffer.push_back(2);
46  ASSERT_EQ(1, buffer.size());
47  ASSERT_EQ(2, buffer[0]);
48 }
49 
50 TEST(CircularBufferTest, OutOfMaxRange)
51 {
52  CircularBuffer<int> buffer(1);
53  int i;
54  ASSERT_NO_THROW(i = buffer[1]);
55  ASSERT_THROW(i = buffer.at(1), std::out_of_range);
56 }
57 
58 TEST(CircularBufferTest, OutOfRange)
59 {
60  CircularBuffer<int> buffer(2);
61  buffer.push_back(1);
62  int i;
63  ASSERT_NO_THROW(i = buffer[1]);
64  ASSERT_THROW(i = buffer.at(1), std::out_of_range);
65 }
66 
67 TEST(CircularBufferTest, ConstValues)
68 {
69  CircularBuffer<int> buffer(5);
70  // buffer[0] = 2; // won't compile
71  CircularBuffer<int>::iterator it = buffer.begin();
72  // *it = 2; // won't compile
73 }
74 
75 TEST(CircularBufferTest, CopyConstructor)
76 {
77  CircularBuffer<int> b1(5);
78  b1.push_back(1);
79  b1.push_back(2);
80  CircularBuffer<int> b2(b1);
81  ASSERT_EQ(5, b2.get_max_size());
82  ASSERT_EQ(1, b2[0]);
83  ASSERT_EQ(2, b2[1]);
84  b2.push_back(3);
85  ASSERT_EQ(3, b2[2]);
86  ASSERT_EQ(1, b1[0]);
87  ASSERT_EQ(2, b1[1]);
88  ASSERT_THROW(b1.at(2), std::out_of_range);
89 }
Fawkes library namespace.
const_iterator iterator
iterator is also const, we don't want to manipulate any elements
Circular buffer with a fixed size.