Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
test-vector.cpp
Go to the documentation of this file.
1 /* -*- c-basic-offset: 2; coding: utf-8 -*- */
2 /*
3  Copyright (C) 2011-2012 Brazil
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Lesser General Public
7  License version 2.1 as published by the Free Software Foundation.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Lesser General Public License for more details.
13 
14  You should have received a copy of the GNU Lesser General Public
15  License along with this library; if not, write to the Free Software
16  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18 
19 #include <gcutter.h>
20 #include <cppcutter.h>
21 
22 #include <grn-assertions.h>
23 #include <dat/vector.hpp>
24 
25 namespace
26 {
27  class Counter {
28  public:
29  Counter() {
30  ++constructor_count;
31  }
32  Counter(const Counter &) {
33  ++copy_count;
34  }
35  ~Counter() {
36  ++destructor_count;
37  }
38 
39  static int constructor_count;
40  static int copy_count;
41  static int destructor_count;
42  };
43 
44  int Counter::constructor_count = 0;
45  int Counter::copy_count = 0;
46  int Counter::destructor_count = 0;
47 }
48 
49 namespace test_dat_vector
50 {
51  void test_empty_vector(void)
52  {
54 
55  cppcut_assert_equal(true, vec.empty());
56  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
57  cppcut_assert_equal(grn::dat::UInt32(0), vec.capacity());
58  }
59 
60  void test_reserve(void)
61  {
63 
64  vec.reserve(1);
65  cppcut_assert_equal(true, vec.empty());
66  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
67  cppcut_assert_equal(grn::dat::UInt32(1), vec.capacity());
68 
69  vec.reserve(2);
70  cppcut_assert_equal(true, vec.empty());
71  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
72  cppcut_assert_equal(grn::dat::UInt32(2), vec.capacity());
73 
74  vec.reserve(3);
75  cppcut_assert_equal(true, vec.empty());
76  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
77  cppcut_assert_equal(grn::dat::UInt32(4), vec.capacity());
78 
79  vec.reserve(100);
80  cppcut_assert_equal(true, vec.empty());
81  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
82  cppcut_assert_equal(grn::dat::UInt32(100), vec.capacity());
83 
84  vec.reserve(101);
85  cppcut_assert_equal(true, vec.empty());
86  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
87  cppcut_assert_equal(grn::dat::UInt32(200), vec.capacity());
88 
89  vec.reserve(0);
90  cppcut_assert_equal(true, vec.empty());
91  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
92  cppcut_assert_equal(grn::dat::UInt32(200), vec.capacity());
93  }
94 
95  void test_resize(void)
96  {
98 
99  vec.resize(1);
100  cppcut_assert_equal(false, vec.empty());
101  cppcut_assert_equal(grn::dat::UInt32(1), vec.size());
102  cppcut_assert_equal(grn::dat::UInt32(1), vec.capacity());
103 
104  vec.resize(2);
105  cppcut_assert_equal(false, vec.empty());
106  cppcut_assert_equal(grn::dat::UInt32(2), vec.size());
107  cppcut_assert_equal(grn::dat::UInt32(2), vec.capacity());
108 
109  vec.resize(3);
110  cppcut_assert_equal(false, vec.empty());
111  cppcut_assert_equal(grn::dat::UInt32(3), vec.size());
112  cppcut_assert_equal(grn::dat::UInt32(4), vec.capacity());
113 
114  vec.resize(100);
115  cppcut_assert_equal(false, vec.empty());
116  cppcut_assert_equal(grn::dat::UInt32(100), vec.size());
117  cppcut_assert_equal(grn::dat::UInt32(100), vec.capacity());
118 
119  vec.resize(101);
120  cppcut_assert_equal(false, vec.empty());
121  cppcut_assert_equal(grn::dat::UInt32(101), vec.size());
122  cppcut_assert_equal(grn::dat::UInt32(200), vec.capacity());
123 
124  vec.resize(0);
125  cppcut_assert_equal(true, vec.empty());
126  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
127  cppcut_assert_equal(grn::dat::UInt32(200), vec.capacity());
128  }
129 
130  void test_push_pop(void)
131  {
133 
134  vec.push_back();
135  cppcut_assert_equal(false, vec.empty());
136  cppcut_assert_equal(grn::dat::UInt32(1), vec.size());
137  cppcut_assert_equal(grn::dat::UInt32(1), vec.capacity());
138 
139  vec.pop_back();
140  cppcut_assert_equal(true, vec.empty());
141  cppcut_assert_equal(grn::dat::UInt32(0), vec.size());
142  cppcut_assert_equal(grn::dat::UInt32(1), vec.capacity());
143 
144  vec.push_back(5);
145  cppcut_assert_equal(false, vec.empty());
146  cppcut_assert_equal(grn::dat::UInt32(1), vec.size());
147  cppcut_assert_equal(grn::dat::UInt32(1), vec.capacity());
148 
149  cppcut_assert_equal(grn::dat::UInt32(5), vec.front());
150  cppcut_assert_equal(grn::dat::UInt32(5), vec.back());
151 
152  vec.push_back(123);
153  cppcut_assert_equal(false, vec.empty());
154  cppcut_assert_equal(grn::dat::UInt32(2), vec.size());
155  cppcut_assert_equal(grn::dat::UInt32(2), vec.capacity());
156 
157  cppcut_assert_equal(grn::dat::UInt32(5), vec.front());
158  cppcut_assert_equal(grn::dat::UInt32(123), vec.back());
159 
160  vec.pop_back();
161  cppcut_assert_equal(false, vec.empty());
162  cppcut_assert_equal(grn::dat::UInt32(1), vec.size());
163  cppcut_assert_equal(grn::dat::UInt32(2), vec.capacity());
164 
165  cppcut_assert_equal(grn::dat::UInt32(5), vec.front());
166  cppcut_assert_equal(grn::dat::UInt32(5), vec.back());
167 
168  vec.clear();
169 
170  for (grn::dat::UInt32 i = 0; i < 1000; ++i) {
171  vec.push_back(i);
172  cppcut_assert_equal(i, vec.back());
173  cppcut_assert_equal(i + 1, vec.size());
174  }
175  for (grn::dat::UInt32 i = 0; i < 1000; ++i) {
176  cppcut_assert_equal(1000 - i, vec.size());
177  cppcut_assert_equal(999 - i, vec.back());
178  vec.pop_back();
179  }
180  }
181 
182  void test_index_access(void)
183  {
185 
186  vec.resize(100);
187  for (grn::dat::UInt32 i = 0; i < vec.size(); ++i) {
188  vec[i] = i;
189  }
190  for (grn::dat::UInt32 i = 0; i < vec.size(); ++i) {
191  cppcut_assert_equal(i, vec[i]);
192  cppcut_assert_equal(i,
193  const_cast<const grn::dat::Vector<grn::dat::UInt32> &>(vec)[i]);
194  cppcut_assert_equal(vec.begin() + i, &vec[i]);
195  cppcut_assert_equal(vec.end() - vec.size() + i, &vec[i]);
196  }
197  }
198 
200  {
202 
203  cppcut_assert_equal(0, Counter::constructor_count);
204  cppcut_assert_equal(0, Counter::copy_count);
205  cppcut_assert_equal(0, Counter::destructor_count);
206 
207  vec.push_back();
208 
209  cppcut_assert_equal(1, Counter::constructor_count);
210  cppcut_assert_equal(0, Counter::copy_count);
211  cppcut_assert_equal(0, Counter::destructor_count);
212 
213  vec.pop_back();
214 
215  cppcut_assert_equal(1, Counter::constructor_count);
216  cppcut_assert_equal(0, Counter::copy_count);
217  cppcut_assert_equal(1, Counter::destructor_count);
218 
219  vec.resize(10);
220 
221  cppcut_assert_equal(11, Counter::constructor_count);
222  cppcut_assert_equal(0, Counter::copy_count);
223  cppcut_assert_equal(1, Counter::destructor_count);
224 
225  vec.pop_back();
226 
227  cppcut_assert_equal(11, Counter::constructor_count);
228  cppcut_assert_equal(0, Counter::copy_count);
229  cppcut_assert_equal(2, Counter::destructor_count);
230 
231  vec.resize(11);
232 
233  cppcut_assert_equal(13, Counter::constructor_count);
234  cppcut_assert_equal(9, Counter::copy_count);
235  cppcut_assert_equal(11, Counter::destructor_count);
236 
237  vec.clear();
238 
239  cppcut_assert_equal(13, Counter::constructor_count);
240  cppcut_assert_equal(9, Counter::copy_count);
241  cppcut_assert_equal(22, Counter::destructor_count);
242  }
243 }