fix baseline build (old cairo) - 'cairo_rectangle_int_t' does not name a type
[LibreOffice.git] / o3tl / qa / test-sorted_vector.cxx
blob5090dee50569ccf2b8e251332b0c4cd24350571a
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();
71 delete p1;
72 delete p2;
73 delete p4;
76 void testErase()
78 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec;
79 SwContent *p1 = new SwContent(1);
80 SwContent *p2 = new SwContent(2);
81 SwContent *p3 = new SwContent(3);
82 SwContent *p4 = new SwContent(4);
84 aVec.insert(p1);
85 aVec.insert(p2);
86 aVec.insert(p3);
88 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
89 CPPUNIT_ASSERT( aVec.size() == 2 );
91 aVec.erase(1);
92 CPPUNIT_ASSERT( aVec.size() == 1 );
94 CPPUNIT_ASSERT( aVec.erase(p4) == 0 );
96 aVec.clear();
97 CPPUNIT_ASSERT( aVec.size() == 0 );
99 aVec.insert(p1);
100 aVec.insert(p2);
101 aVec.insert(p3);
102 aVec.DeleteAndDestroyAll();
103 CPPUNIT_ASSERT( aVec.size() == 0 );
104 delete p4;
107 void testInsertRange()
109 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec1;
110 SwContent *p1 = new SwContent(1);
111 SwContent *p2 = new SwContent(2);
112 SwContent *p3 = new SwContent(3);
114 aVec1.insert(p1);
115 aVec1.insert(p2);
116 aVec1.insert(p3);
118 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec2;
119 aVec2.insert( aVec1 );
121 CPPUNIT_ASSERT( aVec2.size() == 3 );
122 delete p1;
123 delete p2;
124 delete p3;
127 void testLowerBound()
129 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec;
130 SwContent *p1 = new SwContent(1);
131 SwContent *p2 = new SwContent(2);
132 SwContent *p3 = new SwContent(3);
133 SwContent *p4 = new SwContent(4);
135 aVec.insert(p1);
136 aVec.insert(p2);
137 aVec.insert(p3);
139 CPPUNIT_ASSERT( aVec.lower_bound(p1) == aVec.begin() );
140 CPPUNIT_ASSERT( aVec.lower_bound(p4) == aVec.end() );
141 delete p1;
142 delete p2;
143 delete p3;
144 delete p4;
147 void testBasics_FindPtr()
149 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
150 o3tl::find_partialorder_ptrequals> aVec;
151 SwContent *p1 = new SwContent(1);
152 SwContent *p2 = new SwContent(2);
153 SwContent *p2_2 = new SwContent(2);
154 SwContent *p2_3 = new SwContent(2);
155 SwContent *p2_4 = new SwContent(2);
156 SwContent *p3 = new SwContent(3);
157 SwContent *p4 = new SwContent(4);
159 CPPUNIT_ASSERT( aVec.insert(p3).second );
160 CPPUNIT_ASSERT( aVec.insert(p1).second );
161 CPPUNIT_ASSERT( !aVec.insert(p3).second );
163 CPPUNIT_ASSERT( aVec.size() == 2 );
165 CPPUNIT_ASSERT( aVec[0] == p1 );
166 CPPUNIT_ASSERT( aVec[1] == p3 );
168 CPPUNIT_ASSERT( aVec.insert(p2_2).second );
169 CPPUNIT_ASSERT( aVec.insert(p2_3).second );
170 CPPUNIT_ASSERT( !aVec.insert(p2_2).second );
171 CPPUNIT_ASSERT( aVec.insert(p2_4).second );
172 CPPUNIT_ASSERT( aVec.size() == 5 );
174 CPPUNIT_ASSERT( *aVec.begin() == p1 );
175 CPPUNIT_ASSERT( *(aVec.end()-1) == p3 );
177 CPPUNIT_ASSERT( aVec.front() == p1 );
178 CPPUNIT_ASSERT( aVec.back() == p3 );
180 CPPUNIT_ASSERT( aVec.find(p1) != aVec.end() );
181 CPPUNIT_ASSERT( aVec.find(p1) - aVec.begin() == 0 );
182 CPPUNIT_ASSERT( aVec.find(p3) != aVec.end() );
183 CPPUNIT_ASSERT( aVec.find(p3) - aVec.begin() == 4 );
184 CPPUNIT_ASSERT( aVec.find(p2) == aVec.end() );
185 CPPUNIT_ASSERT( aVec.find(p4) == aVec.end() );
186 CPPUNIT_ASSERT( aVec.find(p2_2) != aVec.end() );
187 CPPUNIT_ASSERT( aVec.find(p2_2) - aVec.begin() >= 1 );
188 CPPUNIT_ASSERT( aVec.find(p2_2) - aVec.begin() < 4 );
189 CPPUNIT_ASSERT( aVec.find(p2_3) != aVec.end() );
190 CPPUNIT_ASSERT( aVec.find(p2_3) - aVec.begin() >= 1 );
191 CPPUNIT_ASSERT( aVec.find(p2_3) - aVec.begin() < 4 );
192 CPPUNIT_ASSERT( aVec.find(p2_4) != aVec.end() );
193 CPPUNIT_ASSERT( aVec.find(p2_4) - aVec.begin() >= 1 );
194 CPPUNIT_ASSERT( aVec.find(p2_4) - aVec.begin() < 4 );
196 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
197 CPPUNIT_ASSERT( aVec.size() == 4 );
198 CPPUNIT_ASSERT( aVec.erase(p2) == 0 );
199 CPPUNIT_ASSERT( aVec.erase(p2_3) == 1 );
200 CPPUNIT_ASSERT( aVec.size() == 3 );
202 aVec.DeleteAndDestroyAll();
203 delete p1;
204 delete p2;
205 delete p2_3;
206 delete p4;
209 void testErase_FindPtr()
211 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
212 o3tl::find_partialorder_ptrequals> aVec;
213 SwContent *p1 = new SwContent(1);
214 SwContent *p1_2 = new SwContent(1);
215 SwContent *p1_3 = new SwContent(1);
216 SwContent *p2 = new SwContent(2);
217 SwContent *p3 = new SwContent(3);
218 SwContent *p4 = new SwContent(4);
220 aVec.insert(p1);
221 aVec.insert(p2);
222 aVec.insert(p3);
224 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
225 CPPUNIT_ASSERT( aVec.size() == 2 );
227 aVec.erase(1);
228 CPPUNIT_ASSERT( aVec.size() == 1 );
230 CPPUNIT_ASSERT( aVec.erase(p4) == 0 );
232 aVec.clear();
233 CPPUNIT_ASSERT( aVec.size() == 0 );
235 aVec.insert(p1);
236 aVec.insert(p2);
237 aVec.insert(p3);
238 aVec.insert(p1_2);
239 CPPUNIT_ASSERT( aVec.size() == 4 );
240 aVec.insert(p1_3);
241 CPPUNIT_ASSERT( aVec.size() == 5 );
242 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
243 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
244 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
245 CPPUNIT_ASSERT( aVec.find(p1_3) != aVec.end() );
246 CPPUNIT_ASSERT( aVec.erase(p1_3) == 1 );
247 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
248 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
249 CPPUNIT_ASSERT( aVec.find(p1_3) == aVec.end() );
250 CPPUNIT_ASSERT( aVec.erase(p1_3) == 0 );
251 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
252 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
253 CPPUNIT_ASSERT( aVec.find(p1_3) == aVec.end() );
255 aVec.DeleteAndDestroyAll();
256 CPPUNIT_ASSERT( aVec.size() == 0 );
257 delete p1;
258 delete p1_3;
259 delete p4;
264 // Change the following lines only, if you add, remove or rename
265 // member functions of the current class,
266 // because these macros are need by auto register mechanism.
268 CPPUNIT_TEST_SUITE(sorted_vector_test);
269 CPPUNIT_TEST(testBasics);
270 CPPUNIT_TEST(testErase);
271 CPPUNIT_TEST(testInsertRange);
272 CPPUNIT_TEST(testLowerBound);
273 CPPUNIT_TEST(testBasics_FindPtr);
274 CPPUNIT_TEST(testErase_FindPtr);
275 CPPUNIT_TEST_SUITE_END();
279 CPPUNIT_TEST_SUITE_REGISTRATION(sorted_vector_test);
281 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */