fdo#74697 Add Bluez 5 support for impress remote.
[LibreOffice.git] / o3tl / qa / test-sorted_vector.cxx
blobee2e818a555e4f13edb159d094306c33cb5900e1
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 );
101 delete p4;
104 void testInsertRange()
106 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec1;
107 SwContent *p1 = new SwContent(1);
108 SwContent *p2 = new SwContent(2);
109 SwContent *p3 = new SwContent(3);
111 aVec1.insert(p1);
112 aVec1.insert(p2);
113 aVec1.insert(p3);
115 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec2;
116 aVec2.insert( aVec1 );
118 CPPUNIT_ASSERT( aVec2.size() == 3 );
121 void testLowerBound()
123 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent> > aVec;
124 SwContent *p1 = new SwContent(1);
125 SwContent *p2 = new SwContent(2);
126 SwContent *p3 = new SwContent(3);
127 SwContent *p4 = new SwContent(4);
129 aVec.insert(p1);
130 aVec.insert(p2);
131 aVec.insert(p3);
133 CPPUNIT_ASSERT( aVec.lower_bound(p1) == aVec.begin() );
134 CPPUNIT_ASSERT( aVec.lower_bound(p4) == aVec.end() );
135 delete p4;
138 void testBasics_FindPtr()
140 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
141 o3tl::find_partialorder_ptrequals> aVec;
142 SwContent *p1 = new SwContent(1);
143 SwContent *p2 = new SwContent(2);
144 SwContent *p2_2 = new SwContent(2);
145 SwContent *p2_3 = new SwContent(2);
146 SwContent *p2_4 = new SwContent(2);
147 SwContent *p3 = new SwContent(3);
148 SwContent *p4 = new SwContent(4);
150 CPPUNIT_ASSERT( aVec.insert(p3).second );
151 CPPUNIT_ASSERT( aVec.insert(p1).second );
152 CPPUNIT_ASSERT( !aVec.insert(p3).second );
154 CPPUNIT_ASSERT( aVec.size() == 2 );
156 CPPUNIT_ASSERT( aVec[0] == p1 );
157 CPPUNIT_ASSERT( aVec[1] == p3 );
159 CPPUNIT_ASSERT( aVec.insert(p2_2).second );
160 CPPUNIT_ASSERT( aVec.insert(p2_3).second );
161 CPPUNIT_ASSERT( !aVec.insert(p2_2).second );
162 CPPUNIT_ASSERT( aVec.insert(p2_4).second );
163 CPPUNIT_ASSERT( aVec.size() == 5 );
165 CPPUNIT_ASSERT( *aVec.begin() == p1 );
166 CPPUNIT_ASSERT( *(aVec.end()-1) == p3 );
168 CPPUNIT_ASSERT( aVec.front() == p1 );
169 CPPUNIT_ASSERT( aVec.back() == p3 );
171 CPPUNIT_ASSERT( aVec.find(p1) != aVec.end() );
172 CPPUNIT_ASSERT( aVec.find(p1) - aVec.begin() == 0 );
173 CPPUNIT_ASSERT( aVec.find(p3) != aVec.end() );
174 CPPUNIT_ASSERT( aVec.find(p3) - aVec.begin() == 4 );
175 CPPUNIT_ASSERT( aVec.find(p2) == aVec.end() );
176 CPPUNIT_ASSERT( aVec.find(p4) == aVec.end() );
177 CPPUNIT_ASSERT( aVec.find(p2_2) != aVec.end() );
178 CPPUNIT_ASSERT( aVec.find(p2_2) - aVec.begin() >= 1 );
179 CPPUNIT_ASSERT( aVec.find(p2_2) - aVec.begin() < 4 );
180 CPPUNIT_ASSERT( aVec.find(p2_3) != aVec.end() );
181 CPPUNIT_ASSERT( aVec.find(p2_3) - aVec.begin() >= 1 );
182 CPPUNIT_ASSERT( aVec.find(p2_3) - aVec.begin() < 4 );
183 CPPUNIT_ASSERT( aVec.find(p2_4) != aVec.end() );
184 CPPUNIT_ASSERT( aVec.find(p2_4) - aVec.begin() >= 1 );
185 CPPUNIT_ASSERT( aVec.find(p2_4) - aVec.begin() < 4 );
187 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
188 CPPUNIT_ASSERT( aVec.size() == 4 );
189 CPPUNIT_ASSERT( aVec.erase(p2) == 0 );
190 CPPUNIT_ASSERT( aVec.erase(p2_3) == 1 );
191 CPPUNIT_ASSERT( aVec.size() == 3 );
193 aVec.DeleteAndDestroyAll();
196 void testErase_FindPtr()
198 o3tl::sorted_vector<SwContent*, o3tl::less_ptr_to<SwContent>,
199 o3tl::find_partialorder_ptrequals> aVec;
200 SwContent *p1 = new SwContent(1);
201 SwContent *p1_2 = new SwContent(1);
202 SwContent *p1_3 = new SwContent(1);
203 SwContent *p2 = new SwContent(2);
204 SwContent *p3 = new SwContent(3);
205 SwContent *p4 = new SwContent(4);
207 aVec.insert(p1);
208 aVec.insert(p2);
209 aVec.insert(p3);
211 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
212 CPPUNIT_ASSERT( aVec.size() == 2 );
214 aVec.erase(1);
215 CPPUNIT_ASSERT( aVec.size() == 1 );
217 CPPUNIT_ASSERT( aVec.erase(p4) == 0 );
219 aVec.clear();
220 CPPUNIT_ASSERT( aVec.size() == 0 );
222 aVec.insert(p1);
223 aVec.insert(p2);
224 aVec.insert(p3);
225 aVec.insert(p1_2);
226 CPPUNIT_ASSERT( aVec.size() == 4 );
227 aVec.insert(p1_3);
228 CPPUNIT_ASSERT( aVec.size() == 5 );
229 CPPUNIT_ASSERT( aVec.erase(p1) == 1 );
230 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
231 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
232 CPPUNIT_ASSERT( aVec.find(p1_3) != aVec.end() );
233 CPPUNIT_ASSERT( aVec.erase(p1_3) == 1 );
234 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
235 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
236 CPPUNIT_ASSERT( aVec.find(p1_3) == aVec.end() );
237 CPPUNIT_ASSERT( aVec.erase(p1_3) == 0 );
238 CPPUNIT_ASSERT( aVec.find(p1) == aVec.end() );
239 CPPUNIT_ASSERT( aVec.find(p1_2) != aVec.end() );
240 CPPUNIT_ASSERT( aVec.find(p1_3) == aVec.end() );
242 aVec.DeleteAndDestroyAll();
243 CPPUNIT_ASSERT( aVec.size() == 0 );
244 delete p4;
249 // Change the following lines only, if you add, remove or rename
250 // member functions of the current class,
251 // because these macros are need by auto register mechanism.
253 CPPUNIT_TEST_SUITE(sorted_vector_test);
254 CPPUNIT_TEST(testBasics);
255 CPPUNIT_TEST(testErase);
256 CPPUNIT_TEST(testInsertRange);
257 CPPUNIT_TEST(testLowerBound);
258 CPPUNIT_TEST(testBasics_FindPtr);
259 CPPUNIT_TEST(testErase_FindPtr);
260 CPPUNIT_TEST_SUITE_END();
263 // -----------------------------------------------------------------------------
264 CPPUNIT_TEST_SUITE_REGISTRATION(sorted_vector_test);
266 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */