Version 4.0.0.1, tag libreoffice-4.0.0.1
[LibreOffice.git] / o3tl / qa / test-sorted_vector.cxx
blob8e9e719f2c1df589d001505404be5456d77331a9
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 */
10 #include "cppunit/TestAssert.h"
11 #include "cppunit/TestFixture.h"
12 #include "cppunit/extensions/HelperMacros.h"
14 #include <o3tl/sorted_vector.hxx>
16 using namespace ::o3tl;
19 // helper class
20 class SwContent
22 public:
23 int x;
25 SwContent(int x_) : x(x_) {}
27 bool operator<( const SwContent &rCmp) const
29 return x < rCmp.x;
33 class sorted_vector_test : public CppUnit::TestFixture
35 public:
36 void testBasics()
38 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec;
39 SwContent *p1 = new SwContent(1);
40 SwContent *p2 = new SwContent(2);
41 SwContent *p3 = new SwContent(3);
42 SwContent *p4 = new SwContent(4);
44 CPPUNIT_ASSERT( aVec.insert(p3).second );
45 CPPUNIT_ASSERT( aVec.insert(p1).second );
46 CPPUNIT_ASSERT( !aVec.insert(p3).second );
48 CPPUNIT_ASSERT( aVec.size() == 2 );
50 CPPUNIT_ASSERT( aVec[0] == p1 );
51 CPPUNIT_ASSERT( aVec[1] == p3 );
53 CPPUNIT_ASSERT( *aVec.begin() == p1 );
54 CPPUNIT_ASSERT( *(aVec.end()-1) == p3 );
56 CPPUNIT_ASSERT( aVec.front() == p1 );
57 CPPUNIT_ASSERT( aVec.back() == p3 );
59 CPPUNIT_ASSERT( aVec.find(p1) != aVec.end() );
60 CPPUNIT_ASSERT( aVec.find(p1) - aVec.begin() == 0 );
61 CPPUNIT_ASSERT( aVec.find(p3) != aVec.end() );
62 CPPUNIT_ASSERT( aVec.find(p3) - aVec.begin() == 1 );
63 CPPUNIT_ASSERT( aVec.find(p2) == aVec.end() );
64 CPPUNIT_ASSERT( aVec.find(p4) == aVec.end() );
66 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
67 CPPUNIT_ASSERT( aVec.size() == 1 );
68 CPPUNIT_ASSERT( aVec.erase(p2) == 0 );
70 aVec.DeleteAndDestroyAll();
73 void testErase()
75 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec;
76 SwContent *p1 = new SwContent(1);
77 SwContent *p2 = new SwContent(2);
78 SwContent *p3 = new SwContent(3);
79 SwContent *p4 = new SwContent(4);
81 aVec.insert(p1);
82 aVec.insert(p2);
83 aVec.insert(p3);
85 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
86 CPPUNIT_ASSERT( aVec.size() == 2 );
88 aVec.erase(1);
89 CPPUNIT_ASSERT( aVec.size() == 1 );
91 CPPUNIT_ASSERT( aVec.erase(p4) == 0 );
93 aVec.clear();
94 CPPUNIT_ASSERT( aVec.size() == 0 );
96 aVec.insert(p1);
97 aVec.insert(p2);
98 aVec.insert(p3);
99 aVec.DeleteAndDestroyAll();
100 CPPUNIT_ASSERT( aVec.size() == 0 );
103 void testInsertRange()
105 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec1;
106 SwContent *p1 = new SwContent(1);
107 SwContent *p2 = new SwContent(2);
108 SwContent *p3 = new SwContent(3);
110 aVec1.insert(p1);
111 aVec1.insert(p2);
112 aVec1.insert(p3);
114 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec2;
115 aVec2.insert( aVec1 );
117 CPPUNIT_ASSERT( aVec2.size() == 3 );
120 void testLowerBound()
122 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec;
123 SwContent *p1 = new SwContent(1);
124 SwContent *p2 = new SwContent(2);
125 SwContent *p3 = new SwContent(3);
126 SwContent *p4 = new SwContent(4);
128 aVec.insert(p1);
129 aVec.insert(p2);
130 aVec.insert(p3);
132 CPPUNIT_ASSERT( aVec.lower_bound(p1) == aVec.begin() );
133 CPPUNIT_ASSERT( aVec.lower_bound(p4) == aVec.end() );
136 void testBasics_FindPtr()
138 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
139 o3tl::find_partialorder_ptrequals> aVec;
140 SwContent *p1 = new SwContent(1);
141 SwContent *p2 = new SwContent(2);
142 SwContent *p2_2 = new SwContent(2);
143 SwContent *p2_3 = new SwContent(2);
144 SwContent *p2_4 = new SwContent(2);
145 SwContent *p3 = new SwContent(3);
146 SwContent *p4 = new SwContent(4);
148 CPPUNIT_ASSERT( aVec.insert(p3).second );
149 CPPUNIT_ASSERT( aVec.insert(p1).second );
150 CPPUNIT_ASSERT( !aVec.insert(p3).second );
152 CPPUNIT_ASSERT( aVec.size() == 2 );
154 CPPUNIT_ASSERT( aVec[0] == p1 );
155 CPPUNIT_ASSERT( aVec[1] == p3 );
157 CPPUNIT_ASSERT( aVec.insert(p2_2).second );
158 CPPUNIT_ASSERT( aVec.insert(p2_3).second );
159 CPPUNIT_ASSERT( !aVec.insert(p2_2).second );
160 CPPUNIT_ASSERT( aVec.insert(p2_4).second );
161 CPPUNIT_ASSERT( aVec.size() == 5 );
163 CPPUNIT_ASSERT( *aVec.begin() == p1 );
164 CPPUNIT_ASSERT( *(aVec.end()-1) == p3 );
166 CPPUNIT_ASSERT( aVec.front() == p1 );
167 CPPUNIT_ASSERT( aVec.back() == p3 );
169 CPPUNIT_ASSERT( aVec.find(p1) != aVec.end() );
170 CPPUNIT_ASSERT( aVec.find(p1) - aVec.begin() == 0 );
171 CPPUNIT_ASSERT( aVec.find(p3) != aVec.end() );
172 CPPUNIT_ASSERT( aVec.find(p3) - aVec.begin() == 4 );
173 CPPUNIT_ASSERT( aVec.find(p2) == aVec.end() );
174 CPPUNIT_ASSERT( aVec.find(p4) == aVec.end() );
175 CPPUNIT_ASSERT( aVec.find(p2_2) != aVec.end() );
176 CPPUNIT_ASSERT( aVec.find(p2_2) - aVec.begin() >= 1 );
177 CPPUNIT_ASSERT( aVec.find(p2_2) - aVec.begin() < 4 );
178 CPPUNIT_ASSERT( aVec.find(p2_3) != aVec.end() );
179 CPPUNIT_ASSERT( aVec.find(p2_3) - aVec.begin() >= 1 );
180 CPPUNIT_ASSERT( aVec.find(p2_3) - aVec.begin() < 4 );
181 CPPUNIT_ASSERT( aVec.find(p2_4) != aVec.end() );
182 CPPUNIT_ASSERT( aVec.find(p2_4) - aVec.begin() >= 1 );
183 CPPUNIT_ASSERT( aVec.find(p2_4) - aVec.begin() < 4 );
185 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
186 CPPUNIT_ASSERT( aVec.size() == 4 );
187 CPPUNIT_ASSERT( aVec.erase(p2) == 0 );
188 CPPUNIT_ASSERT( aVec.erase(p2_3) == 1 );
189 CPPUNIT_ASSERT( aVec.size() == 3 );
191 aVec.DeleteAndDestroyAll();
194 void testErase_FindPtr()
196 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
197 o3tl::find_partialorder_ptrequals> aVec;
198 SwContent *p1 = new SwContent(1);
199 SwContent *p1_2 = new SwContent(1);
200 SwContent *p1_3 = new SwContent(1);
201 SwContent *p2 = new SwContent(2);
202 SwContent *p3 = new SwContent(3);
203 SwContent *p4 = new SwContent(4);
205 aVec.insert(p1);
206 aVec.insert(p2);
207 aVec.insert(p3);
209 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
210 CPPUNIT_ASSERT( aVec.size() == 2 );
212 aVec.erase(1);
213 CPPUNIT_ASSERT( aVec.size() == 1 );
215 CPPUNIT_ASSERT( aVec.erase(p4) == 0 );
217 aVec.clear();
218 CPPUNIT_ASSERT( aVec.size() == 0 );
220 aVec.insert(p1);
221 aVec.insert(p2);
222 aVec.insert(p3);
223 aVec.insert(p1_2);
224 CPPUNIT_ASSERT( aVec.size() == 4 );
225 aVec.insert(p1_3);
226 CPPUNIT_ASSERT( aVec.size() == 5 );
227 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
228 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
229 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
230 CPPUNIT_ASSERT( aVec.find(p1_3) != aVec.end() );
231 CPPUNIT_ASSERT( aVec.erase(p1_3) == 1 );
232 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
233 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
234 CPPUNIT_ASSERT( aVec.find(p1_3) == aVec.end() );
235 CPPUNIT_ASSERT( aVec.erase(p1_3) == 0 );
236 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
237 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
238 CPPUNIT_ASSERT( aVec.find(p1_3) == aVec.end() );
240 aVec.DeleteAndDestroyAll();
241 CPPUNIT_ASSERT( aVec.size() == 0 );
246 // Change the following lines only, if you add, remove or rename
247 // member functions of the current class,
248 // because these macros are need by auto register mechanism.
250 CPPUNIT_TEST_SUITE(sorted_vector_test);
251 CPPUNIT_TEST(testBasics);
252 CPPUNIT_TEST(testErase);
253 CPPUNIT_TEST(testInsertRange);
254 CPPUNIT_TEST(testLowerBound);
255 CPPUNIT_TEST(testBasics_FindPtr);
256 CPPUNIT_TEST(testErase_FindPtr);
257 CPPUNIT_TEST_SUITE_END();
260 // -----------------------------------------------------------------------------
261 CPPUNIT_TEST_SUITE_REGISTRATION(sorted_vector_test);
263 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */