1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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/.
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
;
25 SwContent(int x_
) : x(x_
) {}
27 bool operator<( const SwContent
&rCmp
) const
33 class sorted_vector_test
: public CppUnit::TestFixture
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();
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);
88 CPPUNIT_ASSERT( aVec
.erase(p1
) == 1 );
89 CPPUNIT_ASSERT( aVec
.size() == 2 );
92 CPPUNIT_ASSERT( aVec
.size() == 1 );
94 CPPUNIT_ASSERT( aVec
.erase(p4
) == 0 );
97 CPPUNIT_ASSERT( aVec
.size() == 0 );
102 aVec
.DeleteAndDestroyAll();
103 CPPUNIT_ASSERT( aVec
.size() == 0 );
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);
118 o3tl::sorted_vector
<SwContent
*, o3tl::less_ptr_to
<SwContent
> > aVec2
;
119 aVec2
.insert( aVec1
);
121 CPPUNIT_ASSERT( aVec2
.size() == 3 );
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);
139 CPPUNIT_ASSERT( aVec
.lower_bound(p1
) == aVec
.begin() );
140 CPPUNIT_ASSERT( aVec
.lower_bound(p4
) == aVec
.end() );
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();
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);
224 CPPUNIT_ASSERT( aVec
.erase(p1
) == 1 );
225 CPPUNIT_ASSERT( aVec
.size() == 2 );
228 CPPUNIT_ASSERT( aVec
.size() == 1 );
230 CPPUNIT_ASSERT( aVec
.erase(p4
) == 0 );
233 CPPUNIT_ASSERT( aVec
.size() == 0 );
239 CPPUNIT_ASSERT( aVec
.size() == 4 );
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 );
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: */