xref: /AOO41X/main/sw/qa/core/Test-BigPtrArray.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
29*cdf0e10cSrcweir #include "precompiled_sw.hxx"
30*cdf0e10cSrcweir #define TIMELOG
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir #include <testshl/simpleheader.hxx>
33*cdf0e10cSrcweir #include <bparr.hxx>
34*cdf0e10cSrcweir #include <string>
35*cdf0e10cSrcweir #include <stdlib.h>
36*cdf0e10cSrcweir #include <rtl/logfile.hxx>
37*cdf0e10cSrcweir 
38*cdf0e10cSrcweir #undef ENABLE_DEBUG_OUTPUT
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir using namespace std;
41*cdf0e10cSrcweir 
42*cdf0e10cSrcweir 
43*cdf0e10cSrcweir namespace /* private */
44*cdf0e10cSrcweir {
45*cdf0e10cSrcweir     const int NUM_ENTRIES = 100000;
46*cdf0e10cSrcweir 
47*cdf0e10cSrcweir     class BigPtrEntryMock : public BigPtrEntry
48*cdf0e10cSrcweir     {
49*cdf0e10cSrcweir     public:
50*cdf0e10cSrcweir         BigPtrEntryMock(int count) : count_(count)
51*cdf0e10cSrcweir         {
52*cdf0e10cSrcweir         }
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir         ~BigPtrEntryMock()
55*cdf0e10cSrcweir         {
56*cdf0e10cSrcweir         #ifdef ENABLE_DEBUG_OUTPUT
57*cdf0e10cSrcweir             printf("Destructor called (%i)\n", count_);
58*cdf0e10cSrcweir         #endif
59*cdf0e10cSrcweir         }
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir         int getCount() const
62*cdf0e10cSrcweir         {
63*cdf0e10cSrcweir             return count_;
64*cdf0e10cSrcweir         }
65*cdf0e10cSrcweir 
66*cdf0e10cSrcweir         void setCount(int newCount)
67*cdf0e10cSrcweir         {
68*cdf0e10cSrcweir             count_ = newCount;
69*cdf0e10cSrcweir         }
70*cdf0e10cSrcweir 
71*cdf0e10cSrcweir         sal_uLong Position() const
72*cdf0e10cSrcweir         {
73*cdf0e10cSrcweir             return GetPos();
74*cdf0e10cSrcweir         }
75*cdf0e10cSrcweir 
76*cdf0e10cSrcweir     private:
77*cdf0e10cSrcweir         int count_;
78*cdf0e10cSrcweir     };
79*cdf0e10cSrcweir 
80*cdf0e10cSrcweir     sal_Bool AddToCount(const ElementPtr& rElem, void* pArgs)
81*cdf0e10cSrcweir     {
82*cdf0e10cSrcweir         BigPtrEntryMock* const pbem = static_cast<BigPtrEntryMock* const>(rElem);
83*cdf0e10cSrcweir         pbem->setCount(pbem->getCount() + *((int*)pArgs));
84*cdf0e10cSrcweir         return true;
85*cdf0e10cSrcweir     }
86*cdf0e10cSrcweir 
87*cdf0e10cSrcweir     void dumpBigPtrArray(const BigPtrArray& bparr)
88*cdf0e10cSrcweir     {
89*cdf0e10cSrcweir     #ifdef ENABLE_DEBUG_OUTPUT
90*cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
91*cdf0e10cSrcweir             printf("bparr[%i,%i]: %i\n", i, static_cast<BigPtrEntryMock*>(bparr[i])->Position(), static_cast<BigPtrEntryMock*>(bparr[i])->getCount());
92*cdf0e10cSrcweir 
93*cdf0e10cSrcweir         printf("\n");
94*cdf0e10cSrcweir     #endif
95*cdf0e10cSrcweir     }
96*cdf0e10cSrcweir 
97*cdf0e10cSrcweir     void fillBigPtrArray(BigPtrArray& bparr, sal_uLong numEntries)
98*cdf0e10cSrcweir     {
99*cdf0e10cSrcweir         for (int i = 0; i < numEntries; i++)
100*cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
101*cdf0e10cSrcweir     }
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir     void printMethodName(const char* name)
104*cdf0e10cSrcweir     {
105*cdf0e10cSrcweir     #ifdef ENABLE_DEBUG_OUTPUT
106*cdf0e10cSrcweir         printf(name);
107*cdf0e10cSrcweir     #endif
108*cdf0e10cSrcweir     }
109*cdf0e10cSrcweir 
110*cdf0e10cSrcweir     bool checkElementPositions(const BigPtrArray& bparr)
111*cdf0e10cSrcweir     {
112*cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
113*cdf0e10cSrcweir         {
114*cdf0e10cSrcweir             if (static_cast<BigPtrEntryMock*>(bparr[i])->Position() != i)
115*cdf0e10cSrcweir                 return false;
116*cdf0e10cSrcweir         }
117*cdf0e10cSrcweir         return true;
118*cdf0e10cSrcweir     }
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir     void releaseBigPtrArrayContent(BigPtrArray& bparr)
121*cdf0e10cSrcweir     {
122*cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
123*cdf0e10cSrcweir             delete bparr[i];
124*cdf0e10cSrcweir     }
125*cdf0e10cSrcweir 
126*cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT(logFile, "BigPtrArray performance measures" );
127*cdf0e10cSrcweir }
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir class BigPtrArrayUnittest : public CppUnit::TestFixture
130*cdf0e10cSrcweir {
131*cdf0e10cSrcweir public:
132*cdf0e10cSrcweir 
133*cdf0e10cSrcweir     BigPtrArrayUnittest()
134*cdf0e10cSrcweir     {
135*cdf0e10cSrcweir     }
136*cdf0e10cSrcweir 
137*cdf0e10cSrcweir     /** Test constructor/destructor
138*cdf0e10cSrcweir         The size of the BigPtrArray
139*cdf0e10cSrcweir         aka the 'Count' should be 0
140*cdf0e10cSrcweir         initially.
141*cdf0e10cSrcweir     */
142*cdf0e10cSrcweir     void test_ctor()
143*cdf0e10cSrcweir     {
144*cdf0e10cSrcweir         printMethodName("test_ctor\n");
145*cdf0e10cSrcweir 
146*cdf0e10cSrcweir         BigPtrArray bparr;
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
149*cdf0e10cSrcweir         (
150*cdf0e10cSrcweir             "BigPtrArray ctor failed",
151*cdf0e10cSrcweir             bparr.Count() == 0
152*cdf0e10cSrcweir         );
153*cdf0e10cSrcweir     }
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir     void test_insert_entries_at_front()
156*cdf0e10cSrcweir     {
157*cdf0e10cSrcweir         printMethodName("test_insert_entries_at_front\n");
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_insert_entries_at_front");
160*cdf0e10cSrcweir 
161*cdf0e10cSrcweir         BigPtrArray bparr;
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
164*cdf0e10cSrcweir         {
165*cdf0e10cSrcweir             sal_uLong oldCount = bparr.Count();
166*cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), 0);
167*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
168*cdf0e10cSrcweir             (
169*cdf0e10cSrcweir                 "test_insert_entries_at_front failed",
170*cdf0e10cSrcweir                 (bparr.Count() == oldCount + 1)
171*cdf0e10cSrcweir             )
172*cdf0e10cSrcweir         }
173*cdf0e10cSrcweir 
174*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_insert_entries_at_front");
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir         for (int i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
177*cdf0e10cSrcweir         {
178*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
179*cdf0e10cSrcweir             (
180*cdf0e10cSrcweir                 "test_insert_entries_at_front failed",
181*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == j
182*cdf0e10cSrcweir             )
183*cdf0e10cSrcweir         }
184*cdf0e10cSrcweir 
185*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
186*cdf0e10cSrcweir         (
187*cdf0e10cSrcweir             "test_insert_entries_at_front failed",
188*cdf0e10cSrcweir             checkElementPositions(bparr)
189*cdf0e10cSrcweir         )
190*cdf0e10cSrcweir 
191*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
192*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
193*cdf0e10cSrcweir     }
194*cdf0e10cSrcweir 
195*cdf0e10cSrcweir     void test_insert_entries_in_the_middle()
196*cdf0e10cSrcweir     {
197*cdf0e10cSrcweir         printMethodName("test_insert_entries_in_the_middle\n");
198*cdf0e10cSrcweir 
199*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_insert_entries_in_the_middle");
200*cdf0e10cSrcweir 
201*cdf0e10cSrcweir         BigPtrArray bparr;
202*cdf0e10cSrcweir 
203*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
204*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
205*cdf0e10cSrcweir 
206*cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
207*cdf0e10cSrcweir 
208*cdf0e10cSrcweir         bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count() / 2);
209*cdf0e10cSrcweir 
210*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_insert_entries_in_the_middle");
211*cdf0e10cSrcweir 
212*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
213*cdf0e10cSrcweir         (
214*cdf0e10cSrcweir             "test_insert_entries_in_the_middle failed",
215*cdf0e10cSrcweir             (oldCount + 1 == bparr.Count() && static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount() == NUM_ENTRIES)
216*cdf0e10cSrcweir         )
217*cdf0e10cSrcweir 
218*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
219*cdf0e10cSrcweir         (
220*cdf0e10cSrcweir             "test_insert_entries_in_the_middle failed",
221*cdf0e10cSrcweir             checkElementPositions(bparr)
222*cdf0e10cSrcweir         )
223*cdf0e10cSrcweir 
224*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
225*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
226*cdf0e10cSrcweir     }
227*cdf0e10cSrcweir 
228*cdf0e10cSrcweir     void test_insert_at_already_used_index()
229*cdf0e10cSrcweir     {
230*cdf0e10cSrcweir         printMethodName("test_insert_at_already_used_index\n");
231*cdf0e10cSrcweir 
232*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_insert_at_already_used_index");
233*cdf0e10cSrcweir 
234*cdf0e10cSrcweir         BigPtrArray bparr;
235*cdf0e10cSrcweir 
236*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
237*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
238*cdf0e10cSrcweir 
239*cdf0e10cSrcweir         int oldCount = bparr.Count();
240*cdf0e10cSrcweir 
241*cdf0e10cSrcweir         for (int i = 0, j = -5; i < 5; i++, j++)
242*cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(j), i);
243*cdf0e10cSrcweir 
244*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_insert_at_already_used_index");
245*cdf0e10cSrcweir 
246*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
247*cdf0e10cSrcweir         (
248*cdf0e10cSrcweir             "test_insert_at_already_used_index failed",
249*cdf0e10cSrcweir             (oldCount + 5 == bparr.Count())
250*cdf0e10cSrcweir         )
251*cdf0e10cSrcweir 
252*cdf0e10cSrcweir         for (int i = 0, j = -5; i < bparr.Count(); i++, j++)
253*cdf0e10cSrcweir         {
254*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
255*cdf0e10cSrcweir             (
256*cdf0e10cSrcweir                 "test_insert_at_already_used_index failed",
257*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == j
258*cdf0e10cSrcweir             )
259*cdf0e10cSrcweir         }
260*cdf0e10cSrcweir 
261*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
262*cdf0e10cSrcweir         (
263*cdf0e10cSrcweir             "test_insert_at_already_used_index failed",
264*cdf0e10cSrcweir             checkElementPositions(bparr)
265*cdf0e10cSrcweir         )
266*cdf0e10cSrcweir 
267*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
268*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
269*cdf0e10cSrcweir     }
270*cdf0e10cSrcweir 
271*cdf0e10cSrcweir     void test_insert_at_end()
272*cdf0e10cSrcweir     {
273*cdf0e10cSrcweir         printMethodName("test_insert_at_end\n");
274*cdf0e10cSrcweir 
275*cdf0e10cSrcweir         BigPtrArray bparr;
276*cdf0e10cSrcweir 
277*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
278*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
279*cdf0e10cSrcweir 
280*cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
281*cdf0e10cSrcweir         bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count());
282*cdf0e10cSrcweir 
283*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
284*cdf0e10cSrcweir         (
285*cdf0e10cSrcweir             "test_insert_at_end failed",
286*cdf0e10cSrcweir             (oldCount + 1 == bparr.Count() && static_cast<BigPtrEntryMock*>(bparr[bparr.Count()-1])->getCount() == NUM_ENTRIES)
287*cdf0e10cSrcweir         )
288*cdf0e10cSrcweir 
289*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
290*cdf0e10cSrcweir         (
291*cdf0e10cSrcweir             "test_insert_at_end failed",
292*cdf0e10cSrcweir             checkElementPositions(bparr)
293*cdf0e10cSrcweir         )
294*cdf0e10cSrcweir 
295*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
296*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
297*cdf0e10cSrcweir     }
298*cdf0e10cSrcweir 
299*cdf0e10cSrcweir     void test_remove_at_front()
300*cdf0e10cSrcweir     {
301*cdf0e10cSrcweir         printMethodName("test_remove_at_front\n");
302*cdf0e10cSrcweir 
303*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_remove_at_front");
304*cdf0e10cSrcweir 
305*cdf0e10cSrcweir         BigPtrArray bparr;
306*cdf0e10cSrcweir 
307*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
308*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
309*cdf0e10cSrcweir 
310*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
311*cdf0e10cSrcweir         {
312*cdf0e10cSrcweir             sal_uLong oldCount = bparr.Count();
313*cdf0e10cSrcweir 
314*cdf0e10cSrcweir             delete bparr[0]; // release content
315*cdf0e10cSrcweir             bparr.Remove(0); // remove item from container
316*cdf0e10cSrcweir 
317*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
318*cdf0e10cSrcweir             (
319*cdf0e10cSrcweir                 "test_remove_at_front failed (wrong count)",
320*cdf0e10cSrcweir                 (oldCount - 1 == bparr.Count())
321*cdf0e10cSrcweir             )
322*cdf0e10cSrcweir 
323*cdf0e10cSrcweir             for (int j = 0, k = i + 1; j < bparr.Count(); j++, k++)
324*cdf0e10cSrcweir             {
325*cdf0e10cSrcweir                 CPPUNIT_ASSERT_MESSAGE
326*cdf0e10cSrcweir                 (
327*cdf0e10cSrcweir                     "test_remove_at_front failed",
328*cdf0e10cSrcweir                     static_cast<BigPtrEntryMock*>(bparr[j])->getCount() == k
329*cdf0e10cSrcweir                 )
330*cdf0e10cSrcweir             }
331*cdf0e10cSrcweir 
332*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
333*cdf0e10cSrcweir             (
334*cdf0e10cSrcweir                 "test_remove_at_front failed",
335*cdf0e10cSrcweir                 checkElementPositions(bparr)
336*cdf0e10cSrcweir             )
337*cdf0e10cSrcweir 
338*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
339*cdf0e10cSrcweir         }
340*cdf0e10cSrcweir 
341*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_remove_at_front");
342*cdf0e10cSrcweir     }
343*cdf0e10cSrcweir 
344*cdf0e10cSrcweir     void test_remove_at_back()
345*cdf0e10cSrcweir     {
346*cdf0e10cSrcweir         printMethodName("test_remove_at_back\n");
347*cdf0e10cSrcweir 
348*cdf0e10cSrcweir         BigPtrArray bparr;
349*cdf0e10cSrcweir 
350*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
351*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
352*cdf0e10cSrcweir 
353*cdf0e10cSrcweir         for (int i = NUM_ENTRIES - 1; i >= 0; i--)
354*cdf0e10cSrcweir         {
355*cdf0e10cSrcweir             sal_uLong oldCount = bparr.Count();
356*cdf0e10cSrcweir             delete bparr[i];
357*cdf0e10cSrcweir             bparr.Remove(i);
358*cdf0e10cSrcweir 
359*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
360*cdf0e10cSrcweir             (
361*cdf0e10cSrcweir                 "test_remove_at_back failed (wrong count)",
362*cdf0e10cSrcweir                 (oldCount - 1 == bparr.Count())
363*cdf0e10cSrcweir             )
364*cdf0e10cSrcweir 
365*cdf0e10cSrcweir             for (int j = 0; j < bparr.Count(); j++)
366*cdf0e10cSrcweir             {
367*cdf0e10cSrcweir                 CPPUNIT_ASSERT_MESSAGE
368*cdf0e10cSrcweir                 (
369*cdf0e10cSrcweir                     "test_remove_at_back failed",
370*cdf0e10cSrcweir                     static_cast<BigPtrEntryMock*>(bparr[j])->getCount() == j
371*cdf0e10cSrcweir                 )
372*cdf0e10cSrcweir             }
373*cdf0e10cSrcweir 
374*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
375*cdf0e10cSrcweir             (
376*cdf0e10cSrcweir                 "test_remove_at_back failed",
377*cdf0e10cSrcweir                 checkElementPositions(bparr)
378*cdf0e10cSrcweir             )
379*cdf0e10cSrcweir 
380*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
381*cdf0e10cSrcweir         }
382*cdf0e10cSrcweir     }
383*cdf0e10cSrcweir 
384*cdf0e10cSrcweir     void test_remove_in_the_middle()
385*cdf0e10cSrcweir     {
386*cdf0e10cSrcweir         printMethodName("test_remove_in_the_middle\n");
387*cdf0e10cSrcweir 
388*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_remove_in_the_middle");
389*cdf0e10cSrcweir 
390*cdf0e10cSrcweir         BigPtrArray bparr;
391*cdf0e10cSrcweir 
392*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
393*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
394*cdf0e10cSrcweir 
395*cdf0e10cSrcweir         while (bparr.Count())
396*cdf0e10cSrcweir         {
397*cdf0e10cSrcweir             sal_uLong oldCount = bparr.Count();
398*cdf0e10cSrcweir             int oldElement = static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount();
399*cdf0e10cSrcweir 
400*cdf0e10cSrcweir             delete bparr[bparr.Count() / 2];
401*cdf0e10cSrcweir             bparr.Remove(bparr.Count() / 2);
402*cdf0e10cSrcweir 
403*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
404*cdf0e10cSrcweir             (
405*cdf0e10cSrcweir                 "test_remove_in_the_middle failed (wrong count)",
406*cdf0e10cSrcweir                 (oldCount - 1 == bparr.Count())
407*cdf0e10cSrcweir             )
408*cdf0e10cSrcweir 
409*cdf0e10cSrcweir             for (int i = 0; i < bparr.Count(); i++)
410*cdf0e10cSrcweir             {
411*cdf0e10cSrcweir                 CPPUNIT_ASSERT_MESSAGE
412*cdf0e10cSrcweir                 (
413*cdf0e10cSrcweir                     "test_remove_in_the_middle failed",
414*cdf0e10cSrcweir                     static_cast<BigPtrEntryMock*>(bparr[i])->getCount() != oldElement
415*cdf0e10cSrcweir                 )
416*cdf0e10cSrcweir             }
417*cdf0e10cSrcweir 
418*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
419*cdf0e10cSrcweir             (
420*cdf0e10cSrcweir                 "test_remove_in_the_middle failed",
421*cdf0e10cSrcweir                 checkElementPositions(bparr)
422*cdf0e10cSrcweir             )
423*cdf0e10cSrcweir 
424*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
425*cdf0e10cSrcweir         }
426*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_remove_in_the_middle");
427*cdf0e10cSrcweir     }
428*cdf0e10cSrcweir 
429*cdf0e10cSrcweir     void test_remove_multiple_elements_at_once()
430*cdf0e10cSrcweir     {
431*cdf0e10cSrcweir         printMethodName("test_remove_multiple_elements_at_once\n");
432*cdf0e10cSrcweir 
433*cdf0e10cSrcweir         BigPtrArray bparr;
434*cdf0e10cSrcweir 
435*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
436*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
437*cdf0e10cSrcweir 
438*cdf0e10cSrcweir         while(bparr.Count())
439*cdf0e10cSrcweir         {
440*cdf0e10cSrcweir             sal_uLong nRemove = (bparr.Count() > 3) ? 3 : bparr.Count();
441*cdf0e10cSrcweir             sal_uLong oldCount = bparr.Count();
442*cdf0e10cSrcweir 
443*cdf0e10cSrcweir             for (int i = 0; i < nRemove; i++)
444*cdf0e10cSrcweir                 delete bparr[i];
445*cdf0e10cSrcweir 
446*cdf0e10cSrcweir             bparr.Remove(0, nRemove);
447*cdf0e10cSrcweir 
448*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
449*cdf0e10cSrcweir             (
450*cdf0e10cSrcweir                 "test_remove_multiple_elements_at_once failed",
451*cdf0e10cSrcweir                 (oldCount - nRemove == bparr.Count())
452*cdf0e10cSrcweir             )
453*cdf0e10cSrcweir 
454*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
455*cdf0e10cSrcweir             (
456*cdf0e10cSrcweir                 "test_remove_multiple_elements_at_once failed",
457*cdf0e10cSrcweir                 checkElementPositions(bparr)
458*cdf0e10cSrcweir             )
459*cdf0e10cSrcweir 
460*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
461*cdf0e10cSrcweir         }
462*cdf0e10cSrcweir     }
463*cdf0e10cSrcweir 
464*cdf0e10cSrcweir     void test_remove_all_elements_at_once()
465*cdf0e10cSrcweir     {
466*cdf0e10cSrcweir         printMethodName("test_remove_all_elements_at_once\n");
467*cdf0e10cSrcweir 
468*cdf0e10cSrcweir         BigPtrArray bparr;
469*cdf0e10cSrcweir 
470*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
471*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
472*cdf0e10cSrcweir 
473*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
474*cdf0e10cSrcweir         bparr.Remove(0, bparr.Count());
475*cdf0e10cSrcweir 
476*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
477*cdf0e10cSrcweir         (
478*cdf0e10cSrcweir             "test_remove_all_elements_at_once failed",
479*cdf0e10cSrcweir             bparr.Count() == 0
480*cdf0e10cSrcweir         )
481*cdf0e10cSrcweir 
482*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
483*cdf0e10cSrcweir     }
484*cdf0e10cSrcweir 
485*cdf0e10cSrcweir     void test_move_elements_from_lower_to_higher_pos()
486*cdf0e10cSrcweir     {
487*cdf0e10cSrcweir         printMethodName("test_move_elements_from_lower_to_higher_pos\n");
488*cdf0e10cSrcweir 
489*cdf0e10cSrcweir         BigPtrArray bparr;
490*cdf0e10cSrcweir 
491*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
492*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
493*cdf0e10cSrcweir 
494*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES - 1; i++)
495*cdf0e10cSrcweir         {
496*cdf0e10cSrcweir             bparr.Move(i, i + 2);
497*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
498*cdf0e10cSrcweir         }
499*cdf0e10cSrcweir 
500*cdf0e10cSrcweir         for (int i = 0; i < (NUM_ENTRIES - 1); i++)
501*cdf0e10cSrcweir         {
502*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
503*cdf0e10cSrcweir             (
504*cdf0e10cSrcweir                 "test_move_elements_from_lower_to_higher_pos failed",
505*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i + 1)
506*cdf0e10cSrcweir             )
507*cdf0e10cSrcweir         }
508*cdf0e10cSrcweir 
509*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
510*cdf0e10cSrcweir         (
511*cdf0e10cSrcweir             "test_move_elements_from_lower_to_higher_pos failed",
512*cdf0e10cSrcweir             static_cast<BigPtrEntryMock*>(bparr[NUM_ENTRIES -1])->getCount() == 0
513*cdf0e10cSrcweir         )
514*cdf0e10cSrcweir 
515*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
516*cdf0e10cSrcweir         (
517*cdf0e10cSrcweir             "test_move_elements_from_lower_to_higher_pos failed",
518*cdf0e10cSrcweir             checkElementPositions(bparr)
519*cdf0e10cSrcweir         )
520*cdf0e10cSrcweir 
521*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
522*cdf0e10cSrcweir     }
523*cdf0e10cSrcweir 
524*cdf0e10cSrcweir     void test_move_elements_from_higher_to_lower_pos()
525*cdf0e10cSrcweir     {
526*cdf0e10cSrcweir         printMethodName("test_move_elements_from_higher_to_lower_pos\n");
527*cdf0e10cSrcweir 
528*cdf0e10cSrcweir         BigPtrArray bparr;
529*cdf0e10cSrcweir 
530*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
531*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
532*cdf0e10cSrcweir 
533*cdf0e10cSrcweir         for (int i = NUM_ENTRIES - 1; i >= 1; i--)
534*cdf0e10cSrcweir         {
535*cdf0e10cSrcweir             bparr.Move(i, i - 1);
536*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
537*cdf0e10cSrcweir         }
538*cdf0e10cSrcweir 
539*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
540*cdf0e10cSrcweir         (
541*cdf0e10cSrcweir             "test_move_elements_from_higher_to_lower_pos failed",
542*cdf0e10cSrcweir             static_cast<BigPtrEntryMock*>(bparr[0])->getCount() == (NUM_ENTRIES - 1)
543*cdf0e10cSrcweir         )
544*cdf0e10cSrcweir 
545*cdf0e10cSrcweir         for (int i = 1; i < NUM_ENTRIES; i++)
546*cdf0e10cSrcweir         {
547*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
548*cdf0e10cSrcweir             (
549*cdf0e10cSrcweir                 "test_move_elements_from_higher_to_lower_pos failed",
550*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i - 1)
551*cdf0e10cSrcweir             )
552*cdf0e10cSrcweir         }
553*cdf0e10cSrcweir 
554*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
555*cdf0e10cSrcweir         (
556*cdf0e10cSrcweir             "test_move_elements_from_higher_to_lower_pos failed",
557*cdf0e10cSrcweir             checkElementPositions(bparr)
558*cdf0e10cSrcweir         )
559*cdf0e10cSrcweir 
560*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
561*cdf0e10cSrcweir     }
562*cdf0e10cSrcweir 
563*cdf0e10cSrcweir     void test_move_to_same_position()
564*cdf0e10cSrcweir     {
565*cdf0e10cSrcweir         printMethodName("test_move_to_same_position\n");
566*cdf0e10cSrcweir 
567*cdf0e10cSrcweir         BigPtrArray bparr;
568*cdf0e10cSrcweir 
569*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
570*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
571*cdf0e10cSrcweir 
572*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
573*cdf0e10cSrcweir         {
574*cdf0e10cSrcweir             bparr.Move(i, i);
575*cdf0e10cSrcweir         }
576*cdf0e10cSrcweir 
577*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
578*cdf0e10cSrcweir 
579*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
580*cdf0e10cSrcweir         {
581*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
582*cdf0e10cSrcweir             (
583*cdf0e10cSrcweir                 "test_move_to_same_position failed",
584*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == i
585*cdf0e10cSrcweir             )
586*cdf0e10cSrcweir         }
587*cdf0e10cSrcweir 
588*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
589*cdf0e10cSrcweir         (
590*cdf0e10cSrcweir             "test_move_to_same_position failed",
591*cdf0e10cSrcweir             checkElementPositions(bparr)
592*cdf0e10cSrcweir         )
593*cdf0e10cSrcweir 
594*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
595*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
596*cdf0e10cSrcweir     }
597*cdf0e10cSrcweir 
598*cdf0e10cSrcweir     void test_replace_elements()
599*cdf0e10cSrcweir     {
600*cdf0e10cSrcweir         printMethodName("test_replace_elements\n");
601*cdf0e10cSrcweir 
602*cdf0e10cSrcweir         BigPtrArray bparr;
603*cdf0e10cSrcweir 
604*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
605*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
606*cdf0e10cSrcweir 
607*cdf0e10cSrcweir         for (int i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
608*cdf0e10cSrcweir         {
609*cdf0e10cSrcweir             delete bparr[i];
610*cdf0e10cSrcweir             bparr.Replace(i, new BigPtrEntryMock(j));
611*cdf0e10cSrcweir             dumpBigPtrArray(bparr);
612*cdf0e10cSrcweir         }
613*cdf0e10cSrcweir 
614*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
615*cdf0e10cSrcweir         {
616*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
617*cdf0e10cSrcweir             (
618*cdf0e10cSrcweir                 "test_replace_elements failed",
619*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (NUM_ENTRIES - i - 1)
620*cdf0e10cSrcweir             )
621*cdf0e10cSrcweir         }
622*cdf0e10cSrcweir 
623*cdf0e10cSrcweir         CPPUNIT_ASSERT_MESSAGE
624*cdf0e10cSrcweir         (
625*cdf0e10cSrcweir             "test_replace_elements failed",
626*cdf0e10cSrcweir             checkElementPositions(bparr)
627*cdf0e10cSrcweir         )
628*cdf0e10cSrcweir 
629*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
630*cdf0e10cSrcweir     }
631*cdf0e10cSrcweir 
632*cdf0e10cSrcweir     void test_for_each()
633*cdf0e10cSrcweir     {
634*cdf0e10cSrcweir         printMethodName("test_for_each\n");
635*cdf0e10cSrcweir 
636*cdf0e10cSrcweir         BigPtrArray bparr;
637*cdf0e10cSrcweir 
638*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
639*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
640*cdf0e10cSrcweir 
641*cdf0e10cSrcweir         int addCount = 1;
642*cdf0e10cSrcweir         bparr.ForEach(AddToCount, &addCount);
643*cdf0e10cSrcweir 
644*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
645*cdf0e10cSrcweir         {
646*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
647*cdf0e10cSrcweir             (
648*cdf0e10cSrcweir                 "test_for_each failed",
649*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i+1)
650*cdf0e10cSrcweir             )
651*cdf0e10cSrcweir         }
652*cdf0e10cSrcweir 
653*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
654*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
655*cdf0e10cSrcweir     }
656*cdf0e10cSrcweir 
657*cdf0e10cSrcweir     void test_for_some1()
658*cdf0e10cSrcweir     {
659*cdf0e10cSrcweir          printMethodName("test_for_some1\n");
660*cdf0e10cSrcweir 
661*cdf0e10cSrcweir         BigPtrArray bparr;
662*cdf0e10cSrcweir 
663*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
664*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
665*cdf0e10cSrcweir 
666*cdf0e10cSrcweir         int addCount = 1;
667*cdf0e10cSrcweir         bparr.ForEach(0, NUM_ENTRIES / 2, AddToCount, &addCount);
668*cdf0e10cSrcweir 
669*cdf0e10cSrcweir         int i = 0;
670*cdf0e10cSrcweir         for (/* */; i < NUM_ENTRIES / 2; i++)
671*cdf0e10cSrcweir         {
672*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
673*cdf0e10cSrcweir             (
674*cdf0e10cSrcweir                 "test_for_some1 failed",
675*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i+1)
676*cdf0e10cSrcweir             )
677*cdf0e10cSrcweir         }
678*cdf0e10cSrcweir 
679*cdf0e10cSrcweir         for (/* */; i < NUM_ENTRIES; i++)
680*cdf0e10cSrcweir         {
681*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
682*cdf0e10cSrcweir             (
683*cdf0e10cSrcweir                 "test_for_some1 failed",
684*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i)
685*cdf0e10cSrcweir             )
686*cdf0e10cSrcweir         }
687*cdf0e10cSrcweir 
688*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
689*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
690*cdf0e10cSrcweir     }
691*cdf0e10cSrcweir 
692*cdf0e10cSrcweir     void test_for_some2()
693*cdf0e10cSrcweir     {
694*cdf0e10cSrcweir         printMethodName("test_for_some2\n");
695*cdf0e10cSrcweir 
696*cdf0e10cSrcweir         BigPtrArray bparr;
697*cdf0e10cSrcweir 
698*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
699*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
700*cdf0e10cSrcweir 
701*cdf0e10cSrcweir         int addCount = 1;
702*cdf0e10cSrcweir         bparr.ForEach(NUM_ENTRIES / 2, NUM_ENTRIES, AddToCount, &addCount);
703*cdf0e10cSrcweir 
704*cdf0e10cSrcweir         int i = 0;
705*cdf0e10cSrcweir         for (/* */; i < NUM_ENTRIES / 2; i++)
706*cdf0e10cSrcweir         {
707*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
708*cdf0e10cSrcweir             (
709*cdf0e10cSrcweir                 "test_for_some2 failed",
710*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i)
711*cdf0e10cSrcweir             )
712*cdf0e10cSrcweir         }
713*cdf0e10cSrcweir 
714*cdf0e10cSrcweir         for (/* */; i < NUM_ENTRIES; i++)
715*cdf0e10cSrcweir         {
716*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
717*cdf0e10cSrcweir             (
718*cdf0e10cSrcweir                 "test_for_some2 failed",
719*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i+1)
720*cdf0e10cSrcweir             )
721*cdf0e10cSrcweir         }
722*cdf0e10cSrcweir 
723*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
724*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
725*cdf0e10cSrcweir     }
726*cdf0e10cSrcweir 
727*cdf0e10cSrcweir     void test_for_some3()
728*cdf0e10cSrcweir     {
729*cdf0e10cSrcweir         printMethodName("test_for_some3\n");
730*cdf0e10cSrcweir 
731*cdf0e10cSrcweir         BigPtrArray bparr;
732*cdf0e10cSrcweir 
733*cdf0e10cSrcweir         fillBigPtrArray(bparr, NUM_ENTRIES);
734*cdf0e10cSrcweir         dumpBigPtrArray(bparr);
735*cdf0e10cSrcweir 
736*cdf0e10cSrcweir         int addCount = 1;
737*cdf0e10cSrcweir         bparr.ForEach(0, 0, AddToCount, &addCount);
738*cdf0e10cSrcweir 
739*cdf0e10cSrcweir         for (int i = 0; i < NUM_ENTRIES; i++)
740*cdf0e10cSrcweir         {
741*cdf0e10cSrcweir             CPPUNIT_ASSERT_MESSAGE
742*cdf0e10cSrcweir             (
743*cdf0e10cSrcweir                 "test_for_some3 failed",
744*cdf0e10cSrcweir                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == i
745*cdf0e10cSrcweir             )
746*cdf0e10cSrcweir         }
747*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
748*cdf0e10cSrcweir     }
749*cdf0e10cSrcweir 
750*cdf0e10cSrcweir     CPPUNIT_TEST_SUITE(BigPtrArrayUnittest);
751*cdf0e10cSrcweir     CPPUNIT_TEST(test_ctor);
752*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_entries_at_front);
753*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_entries_in_the_middle);
754*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_already_used_index);
755*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_end);
756*cdf0e10cSrcweir     CPPUNIT_TEST(test_remove_at_front);
757*cdf0e10cSrcweir     CPPUNIT_TEST(test_remove_at_back);
758*cdf0e10cSrcweir     CPPUNIT_TEST(test_remove_in_the_middle);
759*cdf0e10cSrcweir     CPPUNIT_TEST(test_remove_multiple_elements_at_once);
760*cdf0e10cSrcweir     CPPUNIT_TEST(test_remove_all_elements_at_once);
761*cdf0e10cSrcweir     CPPUNIT_TEST(test_move_elements_from_lower_to_higher_pos);
762*cdf0e10cSrcweir     CPPUNIT_TEST(test_move_elements_from_higher_to_lower_pos);
763*cdf0e10cSrcweir     CPPUNIT_TEST(test_replace_elements);
764*cdf0e10cSrcweir     CPPUNIT_TEST(test_for_each);
765*cdf0e10cSrcweir     CPPUNIT_TEST(test_for_some1);
766*cdf0e10cSrcweir     CPPUNIT_TEST(test_for_some2);
767*cdf0e10cSrcweir     CPPUNIT_TEST(test_for_some3);
768*cdf0e10cSrcweir     CPPUNIT_TEST_SUITE_END();
769*cdf0e10cSrcweir };
770*cdf0e10cSrcweir 
771*cdf0e10cSrcweir const char* START = "START: ";
772*cdf0e10cSrcweir const char* END = "END: ";
773*cdf0e10cSrcweir 
774*cdf0e10cSrcweir class PerformanceTracer
775*cdf0e10cSrcweir {
776*cdf0e10cSrcweir public:
777*cdf0e10cSrcweir 
778*cdf0e10cSrcweir public:
779*cdf0e10cSrcweir     PerformanceTracer(const string& methodName) :
780*cdf0e10cSrcweir         startString_(START),
781*cdf0e10cSrcweir         endString_(END)
782*cdf0e10cSrcweir     {
783*cdf0e10cSrcweir         startString_ += methodName;
784*cdf0e10cSrcweir         endString_ += methodName;
785*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, startString_.c_str());
786*cdf0e10cSrcweir     }
787*cdf0e10cSrcweir 
788*cdf0e10cSrcweir     ~PerformanceTracer()
789*cdf0e10cSrcweir     {
790*cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, endString_.c_str());
791*cdf0e10cSrcweir     }
792*cdf0e10cSrcweir 
793*cdf0e10cSrcweir private:
794*cdf0e10cSrcweir     string startString_;
795*cdf0e10cSrcweir     string endString_;
796*cdf0e10cSrcweir };
797*cdf0e10cSrcweir 
798*cdf0e10cSrcweir class BigPtrArrayPerformanceTest : public CppUnit::TestFixture
799*cdf0e10cSrcweir {
800*cdf0e10cSrcweir public:
801*cdf0e10cSrcweir     BigPtrArrayPerformanceTest()
802*cdf0e10cSrcweir     {
803*cdf0e10cSrcweir     }
804*cdf0e10cSrcweir 
805*cdf0e10cSrcweir     void test_insert_at_end_1000()
806*cdf0e10cSrcweir     { test_insert_at_end("1000"); }
807*cdf0e10cSrcweir 
808*cdf0e10cSrcweir     void test_insert_at_end_10000()
809*cdf0e10cSrcweir     { test_insert_at_end("10000"); }
810*cdf0e10cSrcweir 
811*cdf0e10cSrcweir     void test_insert_at_end_100000()
812*cdf0e10cSrcweir     { test_insert_at_end("100000"); }
813*cdf0e10cSrcweir 
814*cdf0e10cSrcweir     void test_insert_at_end_1000000()
815*cdf0e10cSrcweir     { test_insert_at_end("1000000"); }
816*cdf0e10cSrcweir 
817*cdf0e10cSrcweir     void test_insert_at_front_1000()
818*cdf0e10cSrcweir     { test_insert_at_front("1000"); }
819*cdf0e10cSrcweir 
820*cdf0e10cSrcweir     void test_insert_at_front_10000()
821*cdf0e10cSrcweir     { test_insert_at_front("10000"); }
822*cdf0e10cSrcweir 
823*cdf0e10cSrcweir     void test_insert_at_front_100000()
824*cdf0e10cSrcweir     { test_insert_at_front("100000"); }
825*cdf0e10cSrcweir 
826*cdf0e10cSrcweir     void test_insert_at_front_1000000()
827*cdf0e10cSrcweir     { test_insert_at_front("1000000"); }
828*cdf0e10cSrcweir 
829*cdf0e10cSrcweir     CPPUNIT_TEST_SUITE(BigPtrArrayPerformanceTest);
830*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_end_1000);
831*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_end_10000);
832*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_end_100000);
833*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_end_1000000);
834*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_front_1000);
835*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_front_10000);
836*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_front_100000);
837*cdf0e10cSrcweir     CPPUNIT_TEST(test_insert_at_front_1000000);
838*cdf0e10cSrcweir     CPPUNIT_TEST_SUITE_END();
839*cdf0e10cSrcweir 
840*cdf0e10cSrcweir private:
841*cdf0e10cSrcweir     void test_insert_at_end(const char* numElements)
842*cdf0e10cSrcweir     {
843*cdf0e10cSrcweir         char buff[100] = { 0 };
844*cdf0e10cSrcweir         strcat(buff, "test_insert_at_end ");
845*cdf0e10cSrcweir         strcat(buff, numElements);
846*cdf0e10cSrcweir         int n = atoi(numElements);
847*cdf0e10cSrcweir         PerformanceTracer tracer(buff);
848*cdf0e10cSrcweir         BigPtrArray bparr;
849*cdf0e10cSrcweir         for (int i = 0; i < n; i++)
850*cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
851*cdf0e10cSrcweir 
852*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
853*cdf0e10cSrcweir     }
854*cdf0e10cSrcweir 
855*cdf0e10cSrcweir     void test_insert_at_front(const char* numElements)
856*cdf0e10cSrcweir     {
857*cdf0e10cSrcweir         char buff[100] = { 0 };
858*cdf0e10cSrcweir         strcat(buff, "test_insert_at_front ");
859*cdf0e10cSrcweir         strcat(buff, numElements);
860*cdf0e10cSrcweir         int n = atoi(numElements);
861*cdf0e10cSrcweir         PerformanceTracer tracer(buff);
862*cdf0e10cSrcweir         BigPtrArray bparr;
863*cdf0e10cSrcweir         for (int i = 0; i < n; i++)
864*cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), 0);
865*cdf0e10cSrcweir 
866*cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
867*cdf0e10cSrcweir     }
868*cdf0e10cSrcweir };
869*cdf0e10cSrcweir 
870*cdf0e10cSrcweir 
871*cdf0e10cSrcweir //#####################################
872*cdf0e10cSrcweir // register test suites
873*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(BigPtrArrayUnittest, "BigPtrArrayUnittest");
874*cdf0e10cSrcweir CPPUNIT_TEST_SUITE_NAMED_REGISTRATION(BigPtrArrayPerformanceTest, "BigPtrArrayPerformanceTest");
875*cdf0e10cSrcweir 
876*cdf0e10cSrcweir NOADDITIONAL;
877*cdf0e10cSrcweir 
878