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();
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);
85 CPPUNIT_ASSERT( aVec
.erase(p1
) == 1 );
86 CPPUNIT_ASSERT( aVec
.size() == 2 );
89 CPPUNIT_ASSERT( aVec
.size() == 1 );
91 CPPUNIT_ASSERT( aVec
.erase(p4
) == 0 );
94 CPPUNIT_ASSERT( aVec
.size() == 0 );
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);
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);
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);
209 CPPUNIT_ASSERT( aVec
.erase(p1
) == 1 );
210 CPPUNIT_ASSERT( aVec
.size() == 2 );
213 CPPUNIT_ASSERT( aVec
.size() == 1 );
215 CPPUNIT_ASSERT( aVec
.erase(p4
) == 0 );
218 CPPUNIT_ASSERT( aVec
.size() == 0 );
224 CPPUNIT_ASSERT( aVec
.size() == 4 );
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: */