xref: /trunk/main/sw/qa/core/Test-BigPtrArray.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir #define TIMELOG
27cdf0e10cSrcweir 
284bafcef0SDamjan Jovanovic #include "gtest/gtest.h"
29cdf0e10cSrcweir #include <bparr.hxx>
30cdf0e10cSrcweir #include <string>
31cdf0e10cSrcweir #include <stdlib.h>
32cdf0e10cSrcweir #include <rtl/logfile.hxx>
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #undef ENABLE_DEBUG_OUTPUT
35cdf0e10cSrcweir 
364bafcef0SDamjan Jovanovic // FIXME:
374bafcef0SDamjan Jovanovic #define RUN_OLD_FAILING_TESTS 0
384bafcef0SDamjan Jovanovic 
39cdf0e10cSrcweir using namespace std;
40cdf0e10cSrcweir 
41cdf0e10cSrcweir 
42cdf0e10cSrcweir namespace /* private */
43cdf0e10cSrcweir {
444bafcef0SDamjan Jovanovic     const int NUM_ENTRIES = 1000;
45cdf0e10cSrcweir 
46cdf0e10cSrcweir     class BigPtrEntryMock : public BigPtrEntry
47cdf0e10cSrcweir     {
48cdf0e10cSrcweir     public:
BigPtrEntryMock(int count)49cdf0e10cSrcweir         BigPtrEntryMock(int count) : count_(count)
50cdf0e10cSrcweir         {
51cdf0e10cSrcweir         }
52cdf0e10cSrcweir 
~BigPtrEntryMock()53cdf0e10cSrcweir         ~BigPtrEntryMock()
54cdf0e10cSrcweir         {
55cdf0e10cSrcweir         #ifdef ENABLE_DEBUG_OUTPUT
56cdf0e10cSrcweir             printf("Destructor called (%i)\n", count_);
57cdf0e10cSrcweir         #endif
58cdf0e10cSrcweir         }
59cdf0e10cSrcweir 
getCount() const60cdf0e10cSrcweir         int getCount() const
61cdf0e10cSrcweir         {
62cdf0e10cSrcweir             return count_;
63cdf0e10cSrcweir         }
64cdf0e10cSrcweir 
setCount(int newCount)65cdf0e10cSrcweir         void setCount(int newCount)
66cdf0e10cSrcweir         {
67cdf0e10cSrcweir             count_ = newCount;
68cdf0e10cSrcweir         }
69cdf0e10cSrcweir 
Position() const70cdf0e10cSrcweir         sal_uLong Position() const
71cdf0e10cSrcweir         {
72cdf0e10cSrcweir             return GetPos();
73cdf0e10cSrcweir         }
74cdf0e10cSrcweir 
75cdf0e10cSrcweir     private:
76cdf0e10cSrcweir         int count_;
77cdf0e10cSrcweir     };
78cdf0e10cSrcweir 
AddToCount(const ElementPtr & rElem,void * pArgs)79cdf0e10cSrcweir     sal_Bool AddToCount(const ElementPtr& rElem, void* pArgs)
80cdf0e10cSrcweir     {
81cdf0e10cSrcweir         BigPtrEntryMock* const pbem = static_cast<BigPtrEntryMock* const>(rElem);
82cdf0e10cSrcweir         pbem->setCount(pbem->getCount() + *((int*)pArgs));
83cdf0e10cSrcweir         return true;
84cdf0e10cSrcweir     }
85cdf0e10cSrcweir 
dumpBigPtrArray(const BigPtrArray & bparr)86cdf0e10cSrcweir     void dumpBigPtrArray(const BigPtrArray& bparr)
87cdf0e10cSrcweir     {
88cdf0e10cSrcweir     #ifdef ENABLE_DEBUG_OUTPUT
89cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
90cdf0e10cSrcweir             printf("bparr[%i,%i]: %i\n", i, static_cast<BigPtrEntryMock*>(bparr[i])->Position(), static_cast<BigPtrEntryMock*>(bparr[i])->getCount());
91cdf0e10cSrcweir 
92cdf0e10cSrcweir         printf("\n");
93cdf0e10cSrcweir     #endif
94cdf0e10cSrcweir     }
95cdf0e10cSrcweir 
fillBigPtrArray(BigPtrArray & bparr,sal_uLong numEntries)96cdf0e10cSrcweir     void fillBigPtrArray(BigPtrArray& bparr, sal_uLong numEntries)
97cdf0e10cSrcweir     {
98cdf0e10cSrcweir         for (int i = 0; i < numEntries; i++)
99cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
100cdf0e10cSrcweir     }
101cdf0e10cSrcweir 
printMethodName(const char * name)102cdf0e10cSrcweir     void printMethodName(const char* name)
103cdf0e10cSrcweir     {
104cdf0e10cSrcweir     #ifdef ENABLE_DEBUG_OUTPUT
105cdf0e10cSrcweir         printf(name);
106cdf0e10cSrcweir     #endif
107cdf0e10cSrcweir     }
108cdf0e10cSrcweir 
checkElementPositions(const BigPtrArray & bparr)109cdf0e10cSrcweir     bool checkElementPositions(const BigPtrArray& bparr)
110cdf0e10cSrcweir     {
111cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
112cdf0e10cSrcweir         {
113cdf0e10cSrcweir             if (static_cast<BigPtrEntryMock*>(bparr[i])->Position() != i)
114cdf0e10cSrcweir                 return false;
115cdf0e10cSrcweir         }
116cdf0e10cSrcweir         return true;
117cdf0e10cSrcweir     }
118cdf0e10cSrcweir 
releaseBigPtrArrayContent(BigPtrArray & bparr)119cdf0e10cSrcweir     void releaseBigPtrArrayContent(BigPtrArray& bparr)
120cdf0e10cSrcweir     {
121cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
122cdf0e10cSrcweir             delete bparr[i];
123cdf0e10cSrcweir     }
124cdf0e10cSrcweir 
125cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT(logFile, "BigPtrArray performance measures" );
126cdf0e10cSrcweir }
127cdf0e10cSrcweir 
1284bafcef0SDamjan Jovanovic class BigPtrArrayUnittest : public ::testing::Test
129cdf0e10cSrcweir {
130cdf0e10cSrcweir public:
131cdf0e10cSrcweir 
BigPtrArrayUnittest()132cdf0e10cSrcweir     BigPtrArrayUnittest()
133cdf0e10cSrcweir     {
134cdf0e10cSrcweir     }
1354bafcef0SDamjan Jovanovic };
136cdf0e10cSrcweir 
137cdf0e10cSrcweir /** Test constructor/destructor
138cdf0e10cSrcweir     The size of the BigPtrArray
139cdf0e10cSrcweir     aka the 'Count' should be 0
140cdf0e10cSrcweir     initially.
141cdf0e10cSrcweir */
TEST_F(BigPtrArrayUnittest,test_ctor)1424bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_ctor)
143cdf0e10cSrcweir {
144cdf0e10cSrcweir     printMethodName("test_ctor\n");
145cdf0e10cSrcweir 
146cdf0e10cSrcweir     BigPtrArray bparr;
147cdf0e10cSrcweir 
148*a22fd41bSmseidel     ASSERT_TRUE(bparr.Count() == 0) << "BigPtrArray ctor failed";
149cdf0e10cSrcweir }
150cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_insert_entries_at_front)1514bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_insert_entries_at_front)
152cdf0e10cSrcweir {
153cdf0e10cSrcweir     printMethodName("test_insert_entries_at_front\n");
154cdf0e10cSrcweir 
155cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_insert_entries_at_front");
156cdf0e10cSrcweir 
157cdf0e10cSrcweir     BigPtrArray bparr;
158cdf0e10cSrcweir 
159cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
160cdf0e10cSrcweir     {
161cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
162cdf0e10cSrcweir         bparr.Insert(new BigPtrEntryMock(i), 0);
1634bafcef0SDamjan Jovanovic         ASSERT_TRUE((bparr.Count() == oldCount + 1)) << "test_insert_entries_at_front failed";
164cdf0e10cSrcweir     }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_insert_entries_at_front");
167cdf0e10cSrcweir 
168cdf0e10cSrcweir     for (int i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
169cdf0e10cSrcweir     {
1704bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == j) << "test_insert_entries_at_front failed";
171cdf0e10cSrcweir     }
172cdf0e10cSrcweir 
1734bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_insert_entries_at_front failed";
174cdf0e10cSrcweir 
175cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
176cdf0e10cSrcweir     dumpBigPtrArray(bparr);
177cdf0e10cSrcweir }
178cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_insert_entries_in_the_middle)1794bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_insert_entries_in_the_middle)
180cdf0e10cSrcweir {
181cdf0e10cSrcweir     printMethodName("test_insert_entries_in_the_middle\n");
182cdf0e10cSrcweir 
183cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_insert_entries_in_the_middle");
184cdf0e10cSrcweir 
185cdf0e10cSrcweir     BigPtrArray bparr;
186cdf0e10cSrcweir 
187cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
188cdf0e10cSrcweir     dumpBigPtrArray(bparr);
189cdf0e10cSrcweir 
190cdf0e10cSrcweir     sal_uLong oldCount = bparr.Count();
191cdf0e10cSrcweir 
192cdf0e10cSrcweir     bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count() / 2);
193cdf0e10cSrcweir 
194cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_insert_entries_in_the_middle");
195cdf0e10cSrcweir 
1964bafcef0SDamjan Jovanovic     ASSERT_TRUE((oldCount + 1 == bparr.Count() && static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount() == NUM_ENTRIES)) << "test_insert_entries_in_the_middle failed";
197cdf0e10cSrcweir 
1984bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_insert_entries_in_the_middle failed";
199cdf0e10cSrcweir 
200cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
201cdf0e10cSrcweir     dumpBigPtrArray(bparr);
202cdf0e10cSrcweir }
203cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_insert_at_already_used_index)2044bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_insert_at_already_used_index)
205cdf0e10cSrcweir {
206cdf0e10cSrcweir     printMethodName("test_insert_at_already_used_index\n");
207cdf0e10cSrcweir 
208cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_insert_at_already_used_index");
209cdf0e10cSrcweir 
210cdf0e10cSrcweir     BigPtrArray bparr;
211cdf0e10cSrcweir 
212cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
213cdf0e10cSrcweir     dumpBigPtrArray(bparr);
214cdf0e10cSrcweir 
215cdf0e10cSrcweir     int oldCount = bparr.Count();
216cdf0e10cSrcweir 
217cdf0e10cSrcweir     for (int i = 0, j = -5; i < 5; i++, j++)
218cdf0e10cSrcweir         bparr.Insert(new BigPtrEntryMock(j), i);
219cdf0e10cSrcweir 
220cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_insert_at_already_used_index");
221cdf0e10cSrcweir 
2224bafcef0SDamjan Jovanovic     ASSERT_TRUE((oldCount + 5 == bparr.Count())) << "test_insert_at_already_used_index failed";
223cdf0e10cSrcweir 
224cdf0e10cSrcweir     for (int i = 0, j = -5; i < bparr.Count(); i++, j++)
225cdf0e10cSrcweir     {
2264bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == j) << "test_insert_at_already_used_index failed";
227cdf0e10cSrcweir     }
228cdf0e10cSrcweir 
2294bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_insert_at_already_used_index failed";
230cdf0e10cSrcweir 
231cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
232cdf0e10cSrcweir     dumpBigPtrArray(bparr);
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_insert_at_end)2354bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_insert_at_end)
236cdf0e10cSrcweir {
237cdf0e10cSrcweir     printMethodName("test_insert_at_end\n");
238cdf0e10cSrcweir 
239cdf0e10cSrcweir     BigPtrArray bparr;
240cdf0e10cSrcweir 
241cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
242cdf0e10cSrcweir     dumpBigPtrArray(bparr);
243cdf0e10cSrcweir 
244cdf0e10cSrcweir     sal_uLong oldCount = bparr.Count();
245cdf0e10cSrcweir     bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count());
246cdf0e10cSrcweir 
2474bafcef0SDamjan Jovanovic     ASSERT_TRUE((oldCount + 1 == bparr.Count() && static_cast<BigPtrEntryMock*>(bparr[bparr.Count()-1])->getCount() == NUM_ENTRIES)) << "test_insert_at_end failed";
248cdf0e10cSrcweir 
2494bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_insert_at_end failed";
250cdf0e10cSrcweir 
251cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
252cdf0e10cSrcweir     dumpBigPtrArray(bparr);
253cdf0e10cSrcweir }
254cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_remove_at_front)2554bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_remove_at_front)
256cdf0e10cSrcweir {
257cdf0e10cSrcweir     printMethodName("test_remove_at_front\n");
258cdf0e10cSrcweir 
259cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_remove_at_front");
260cdf0e10cSrcweir 
261cdf0e10cSrcweir     BigPtrArray bparr;
262cdf0e10cSrcweir 
263cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
264cdf0e10cSrcweir     dumpBigPtrArray(bparr);
265cdf0e10cSrcweir 
266cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
267cdf0e10cSrcweir     {
268cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
269cdf0e10cSrcweir 
270cdf0e10cSrcweir         delete bparr[0]; // release content
271cdf0e10cSrcweir         bparr.Remove(0); // remove item from container
272cdf0e10cSrcweir 
2734bafcef0SDamjan Jovanovic         ASSERT_TRUE((oldCount - 1 == bparr.Count())) << "test_remove_at_front failed (wrong count)";
274cdf0e10cSrcweir 
275cdf0e10cSrcweir         for (int j = 0, k = i + 1; j < bparr.Count(); j++, k++)
276cdf0e10cSrcweir         {
2774bafcef0SDamjan Jovanovic             ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[j])->getCount() == k) << "test_remove_at_front failed";
278cdf0e10cSrcweir         }
279cdf0e10cSrcweir 
2804bafcef0SDamjan Jovanovic         ASSERT_TRUE(checkElementPositions(bparr)) << "test_remove_at_front failed";
281cdf0e10cSrcweir 
282cdf0e10cSrcweir         dumpBigPtrArray(bparr);
283cdf0e10cSrcweir     }
284cdf0e10cSrcweir 
285cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_remove_at_front");
286cdf0e10cSrcweir }
287cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_remove_at_back)2884bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_remove_at_back)
289cdf0e10cSrcweir {
290cdf0e10cSrcweir     printMethodName("test_remove_at_back\n");
291cdf0e10cSrcweir 
292cdf0e10cSrcweir     BigPtrArray bparr;
293cdf0e10cSrcweir 
294cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
295cdf0e10cSrcweir     dumpBigPtrArray(bparr);
296cdf0e10cSrcweir 
297cdf0e10cSrcweir     for (int i = NUM_ENTRIES - 1; i >= 0; i--)
298cdf0e10cSrcweir     {
299cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
300cdf0e10cSrcweir         delete bparr[i];
301cdf0e10cSrcweir         bparr.Remove(i);
302cdf0e10cSrcweir 
3034bafcef0SDamjan Jovanovic         ASSERT_TRUE((oldCount - 1 == bparr.Count())) << "test_remove_at_back failed (wrong count)";
304cdf0e10cSrcweir 
305cdf0e10cSrcweir         for (int j = 0; j < bparr.Count(); j++)
306cdf0e10cSrcweir         {
3074bafcef0SDamjan Jovanovic             ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[j])->getCount() == j) << "test_remove_at_back failed";
308cdf0e10cSrcweir         }
309cdf0e10cSrcweir 
3104bafcef0SDamjan Jovanovic         ASSERT_TRUE(checkElementPositions(bparr)) << "test_remove_at_back failed";
311cdf0e10cSrcweir 
312cdf0e10cSrcweir         dumpBigPtrArray(bparr);
313cdf0e10cSrcweir     }
314cdf0e10cSrcweir }
315cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_remove_in_the_middle)3164bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_remove_in_the_middle)
317cdf0e10cSrcweir {
318cdf0e10cSrcweir     printMethodName("test_remove_in_the_middle\n");
319cdf0e10cSrcweir 
320cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "START: test_remove_in_the_middle");
321cdf0e10cSrcweir 
322cdf0e10cSrcweir     BigPtrArray bparr;
323cdf0e10cSrcweir 
324cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
325cdf0e10cSrcweir     dumpBigPtrArray(bparr);
326cdf0e10cSrcweir 
327cdf0e10cSrcweir     while (bparr.Count())
328cdf0e10cSrcweir     {
329cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
330cdf0e10cSrcweir         int oldElement = static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount();
331cdf0e10cSrcweir 
332cdf0e10cSrcweir         delete bparr[bparr.Count() / 2];
333cdf0e10cSrcweir         bparr.Remove(bparr.Count() / 2);
334cdf0e10cSrcweir 
3354bafcef0SDamjan Jovanovic         ASSERT_TRUE((oldCount - 1 == bparr.Count())) << "test_remove_in_the_middle failed (wrong count)";
336cdf0e10cSrcweir 
337cdf0e10cSrcweir         for (int i = 0; i < bparr.Count(); i++)
338cdf0e10cSrcweir         {
3394bafcef0SDamjan Jovanovic             ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() != oldElement) << "test_remove_in_the_middle failed";
340cdf0e10cSrcweir         }
341cdf0e10cSrcweir 
3424bafcef0SDamjan Jovanovic         ASSERT_TRUE(checkElementPositions(bparr)) << "test_remove_in_the_middle failed";
343cdf0e10cSrcweir 
344cdf0e10cSrcweir         dumpBigPtrArray(bparr);
345cdf0e10cSrcweir     }
346cdf0e10cSrcweir     RTL_LOGFILE_CONTEXT_TRACE(logFile, "END: test_remove_in_the_middle");
347cdf0e10cSrcweir }
348cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_remove_multiple_elements_at_once)3494bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_remove_multiple_elements_at_once)
350cdf0e10cSrcweir {
351cdf0e10cSrcweir     printMethodName("test_remove_multiple_elements_at_once\n");
352cdf0e10cSrcweir 
353cdf0e10cSrcweir     BigPtrArray bparr;
354cdf0e10cSrcweir 
355cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
356cdf0e10cSrcweir     dumpBigPtrArray(bparr);
357cdf0e10cSrcweir 
358cdf0e10cSrcweir     while(bparr.Count())
359cdf0e10cSrcweir     {
360cdf0e10cSrcweir         sal_uLong nRemove = (bparr.Count() > 3) ? 3 : bparr.Count();
361cdf0e10cSrcweir         sal_uLong oldCount = bparr.Count();
362cdf0e10cSrcweir 
363cdf0e10cSrcweir         for (int i = 0; i < nRemove; i++)
364cdf0e10cSrcweir             delete bparr[i];
365cdf0e10cSrcweir 
366cdf0e10cSrcweir         bparr.Remove(0, nRemove);
367cdf0e10cSrcweir 
3684bafcef0SDamjan Jovanovic         ASSERT_TRUE((oldCount - nRemove == bparr.Count())) << "test_remove_multiple_elements_at_once failed";
369cdf0e10cSrcweir 
3704bafcef0SDamjan Jovanovic         ASSERT_TRUE(checkElementPositions(bparr)) << "test_remove_multiple_elements_at_once failed";
371cdf0e10cSrcweir 
372cdf0e10cSrcweir         dumpBigPtrArray(bparr);
373cdf0e10cSrcweir     }
374cdf0e10cSrcweir }
375cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_remove_all_elements_at_once)3764bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_remove_all_elements_at_once)
377cdf0e10cSrcweir {
378cdf0e10cSrcweir     printMethodName("test_remove_all_elements_at_once\n");
379cdf0e10cSrcweir 
380cdf0e10cSrcweir     BigPtrArray bparr;
381cdf0e10cSrcweir 
382cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
383cdf0e10cSrcweir     dumpBigPtrArray(bparr);
384cdf0e10cSrcweir 
385cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
386cdf0e10cSrcweir     bparr.Remove(0, bparr.Count());
387cdf0e10cSrcweir 
3884bafcef0SDamjan Jovanovic     ASSERT_TRUE(bparr.Count() == 0) << "test_remove_all_elements_at_once failed";
389cdf0e10cSrcweir 
390cdf0e10cSrcweir     dumpBigPtrArray(bparr);
391cdf0e10cSrcweir }
392cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_move_elements_from_lower_to_higher_pos)3934bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_move_elements_from_lower_to_higher_pos)
394cdf0e10cSrcweir {
395cdf0e10cSrcweir     printMethodName("test_move_elements_from_lower_to_higher_pos\n");
396cdf0e10cSrcweir 
397cdf0e10cSrcweir     BigPtrArray bparr;
398cdf0e10cSrcweir 
399cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
400cdf0e10cSrcweir     dumpBigPtrArray(bparr);
401cdf0e10cSrcweir 
402cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES - 1; i++)
403cdf0e10cSrcweir     {
404cdf0e10cSrcweir         bparr.Move(i, i + 2);
405cdf0e10cSrcweir         dumpBigPtrArray(bparr);
406cdf0e10cSrcweir     }
407cdf0e10cSrcweir 
408cdf0e10cSrcweir     for (int i = 0; i < (NUM_ENTRIES - 1); i++)
409cdf0e10cSrcweir     {
4104bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i + 1)) << "test_move_elements_from_lower_to_higher_pos failed";
411cdf0e10cSrcweir     }
412cdf0e10cSrcweir 
4134bafcef0SDamjan Jovanovic     ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[NUM_ENTRIES -1])->getCount() == 0) << "test_move_elements_from_lower_to_higher_pos failed";
414cdf0e10cSrcweir 
4154bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_move_elements_from_lower_to_higher_pos failed";
416cdf0e10cSrcweir 
417cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
418cdf0e10cSrcweir }
419cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_move_elements_from_higher_to_lower_pos)4204bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_move_elements_from_higher_to_lower_pos)
421cdf0e10cSrcweir {
422cdf0e10cSrcweir     printMethodName("test_move_elements_from_higher_to_lower_pos\n");
423cdf0e10cSrcweir 
424cdf0e10cSrcweir     BigPtrArray bparr;
425cdf0e10cSrcweir 
426cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
427cdf0e10cSrcweir     dumpBigPtrArray(bparr);
428cdf0e10cSrcweir 
429cdf0e10cSrcweir     for (int i = NUM_ENTRIES - 1; i >= 1; i--)
430cdf0e10cSrcweir     {
431cdf0e10cSrcweir         bparr.Move(i, i - 1);
432cdf0e10cSrcweir         dumpBigPtrArray(bparr);
433cdf0e10cSrcweir     }
434cdf0e10cSrcweir 
4354bafcef0SDamjan Jovanovic     ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[0])->getCount() == (NUM_ENTRIES - 1)) << "test_move_elements_from_higher_to_lower_pos failed";
436cdf0e10cSrcweir 
437cdf0e10cSrcweir     for (int i = 1; i < NUM_ENTRIES; i++)
438cdf0e10cSrcweir     {
4394bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i - 1)) << "test_move_elements_from_higher_to_lower_pos failed";
440cdf0e10cSrcweir     }
441cdf0e10cSrcweir 
4424bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_move_elements_from_higher_to_lower_pos failed";
443cdf0e10cSrcweir 
444cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
445cdf0e10cSrcweir }
446cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_move_to_same_position)4474bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_move_to_same_position)
448cdf0e10cSrcweir {
449cdf0e10cSrcweir     printMethodName("test_move_to_same_position\n");
450cdf0e10cSrcweir 
451cdf0e10cSrcweir     BigPtrArray bparr;
452cdf0e10cSrcweir 
453cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
454cdf0e10cSrcweir     dumpBigPtrArray(bparr);
455cdf0e10cSrcweir 
456cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
457cdf0e10cSrcweir     {
458cdf0e10cSrcweir         bparr.Move(i, i);
459cdf0e10cSrcweir     }
460cdf0e10cSrcweir 
4614bafcef0SDamjan Jovanovic #if RUN_OLD_FAILING_TESTS
4624bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_move_to_same_position failed";
4634bafcef0SDamjan Jovanovic #endif
4644bafcef0SDamjan Jovanovic 
465cdf0e10cSrcweir     dumpBigPtrArray(bparr);
466cdf0e10cSrcweir 
467cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
468cdf0e10cSrcweir     {
4694bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == i) << "test_move_to_same_position failed";
470cdf0e10cSrcweir     }
471cdf0e10cSrcweir 
4724bafcef0SDamjan Jovanovic #if RUN_OLD_FAILING_TESTS
4734bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_move_to_same_position failed";
4744bafcef0SDamjan Jovanovic #endif
475cdf0e10cSrcweir 
476cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
477cdf0e10cSrcweir     dumpBigPtrArray(bparr);
478cdf0e10cSrcweir }
479cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_replace_elements)4804bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_replace_elements)
481cdf0e10cSrcweir {
482cdf0e10cSrcweir     printMethodName("test_replace_elements\n");
483cdf0e10cSrcweir 
484cdf0e10cSrcweir     BigPtrArray bparr;
485cdf0e10cSrcweir 
486cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
487cdf0e10cSrcweir     dumpBigPtrArray(bparr);
488cdf0e10cSrcweir 
489cdf0e10cSrcweir     for (int i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
490cdf0e10cSrcweir     {
491cdf0e10cSrcweir         delete bparr[i];
492cdf0e10cSrcweir         bparr.Replace(i, new BigPtrEntryMock(j));
493cdf0e10cSrcweir         dumpBigPtrArray(bparr);
494cdf0e10cSrcweir     }
495cdf0e10cSrcweir 
496cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
497cdf0e10cSrcweir     {
4984bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (NUM_ENTRIES - i - 1)) << "test_replace_elements failed";
499cdf0e10cSrcweir     }
500cdf0e10cSrcweir 
5014bafcef0SDamjan Jovanovic     ASSERT_TRUE(checkElementPositions(bparr)) << "test_replace_elements failed";
502cdf0e10cSrcweir 
503cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
504cdf0e10cSrcweir }
505cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_for_each)5064bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_for_each)
507cdf0e10cSrcweir {
508cdf0e10cSrcweir     printMethodName("test_for_each\n");
509cdf0e10cSrcweir 
510cdf0e10cSrcweir     BigPtrArray bparr;
511cdf0e10cSrcweir 
512cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
513cdf0e10cSrcweir     dumpBigPtrArray(bparr);
514cdf0e10cSrcweir 
515cdf0e10cSrcweir     int addCount = 1;
516cdf0e10cSrcweir     bparr.ForEach(AddToCount, &addCount);
517cdf0e10cSrcweir 
518cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
519cdf0e10cSrcweir     {
5204bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i+1)) << "test_for_each failed";
521cdf0e10cSrcweir     }
522cdf0e10cSrcweir 
523cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
524cdf0e10cSrcweir     dumpBigPtrArray(bparr);
525cdf0e10cSrcweir }
526cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_for_some1)5274bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_for_some1)
528cdf0e10cSrcweir {
529cdf0e10cSrcweir      printMethodName("test_for_some1\n");
530cdf0e10cSrcweir 
531cdf0e10cSrcweir     BigPtrArray bparr;
532cdf0e10cSrcweir 
533cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
534cdf0e10cSrcweir     dumpBigPtrArray(bparr);
535cdf0e10cSrcweir 
536cdf0e10cSrcweir     int addCount = 1;
537cdf0e10cSrcweir     bparr.ForEach(0, NUM_ENTRIES / 2, AddToCount, &addCount);
538cdf0e10cSrcweir 
539cdf0e10cSrcweir     int i = 0;
540cdf0e10cSrcweir     for (/* */; i < NUM_ENTRIES / 2; i++)
541cdf0e10cSrcweir     {
5424bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i+1)) << "test_for_some1 failed";
543cdf0e10cSrcweir     }
544cdf0e10cSrcweir 
545cdf0e10cSrcweir     for (/* */; i < NUM_ENTRIES; i++)
546cdf0e10cSrcweir     {
5474bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i)) << "test_for_some1 failed";
548cdf0e10cSrcweir     }
549cdf0e10cSrcweir 
550cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
551cdf0e10cSrcweir     dumpBigPtrArray(bparr);
552cdf0e10cSrcweir }
553cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_for_some2)5544bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_for_some2)
555cdf0e10cSrcweir {
556cdf0e10cSrcweir     printMethodName("test_for_some2\n");
557cdf0e10cSrcweir 
558cdf0e10cSrcweir     BigPtrArray bparr;
559cdf0e10cSrcweir 
560cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
561cdf0e10cSrcweir     dumpBigPtrArray(bparr);
562cdf0e10cSrcweir 
563cdf0e10cSrcweir     int addCount = 1;
564cdf0e10cSrcweir     bparr.ForEach(NUM_ENTRIES / 2, NUM_ENTRIES, AddToCount, &addCount);
565cdf0e10cSrcweir 
566cdf0e10cSrcweir     int i = 0;
567cdf0e10cSrcweir     for (/* */; i < NUM_ENTRIES / 2; i++)
568cdf0e10cSrcweir     {
5694bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i)) << "test_for_some2 failed";
570cdf0e10cSrcweir     }
571cdf0e10cSrcweir 
572cdf0e10cSrcweir     for (/* */; i < NUM_ENTRIES; i++)
573cdf0e10cSrcweir     {
5744bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i+1)) << "test_for_some2 failed";
575cdf0e10cSrcweir     }
576cdf0e10cSrcweir 
577cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
578cdf0e10cSrcweir     dumpBigPtrArray(bparr);
579cdf0e10cSrcweir }
580cdf0e10cSrcweir 
TEST_F(BigPtrArrayUnittest,test_for_some3)5814bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayUnittest, test_for_some3)
582cdf0e10cSrcweir {
583cdf0e10cSrcweir     printMethodName("test_for_some3\n");
584cdf0e10cSrcweir 
585cdf0e10cSrcweir     BigPtrArray bparr;
586cdf0e10cSrcweir 
587cdf0e10cSrcweir     fillBigPtrArray(bparr, NUM_ENTRIES);
588cdf0e10cSrcweir     dumpBigPtrArray(bparr);
589cdf0e10cSrcweir 
590cdf0e10cSrcweir     int addCount = 1;
591cdf0e10cSrcweir     bparr.ForEach(0, 0, AddToCount, &addCount);
592cdf0e10cSrcweir 
593cdf0e10cSrcweir     for (int i = 0; i < NUM_ENTRIES; i++)
594cdf0e10cSrcweir     {
5954bafcef0SDamjan Jovanovic         ASSERT_TRUE(static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == i) << "test_for_some3 failed";
596cdf0e10cSrcweir     }
597cdf0e10cSrcweir     releaseBigPtrArrayContent(bparr);
598cdf0e10cSrcweir }
599cdf0e10cSrcweir 
600cdf0e10cSrcweir 
601cdf0e10cSrcweir const char* START = "START: ";
602cdf0e10cSrcweir const char* END = "END: ";
603cdf0e10cSrcweir 
604cdf0e10cSrcweir class PerformanceTracer
605cdf0e10cSrcweir {
606cdf0e10cSrcweir public:
607cdf0e10cSrcweir 
608cdf0e10cSrcweir public:
PerformanceTracer(const string & methodName)609cdf0e10cSrcweir     PerformanceTracer(const string& methodName) :
610cdf0e10cSrcweir         startString_(START),
611cdf0e10cSrcweir         endString_(END)
612cdf0e10cSrcweir     {
613cdf0e10cSrcweir         startString_ += methodName;
614cdf0e10cSrcweir         endString_ += methodName;
615cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, startString_.c_str());
616cdf0e10cSrcweir     }
617cdf0e10cSrcweir 
~PerformanceTracer()618cdf0e10cSrcweir     ~PerformanceTracer()
619cdf0e10cSrcweir     {
620cdf0e10cSrcweir         RTL_LOGFILE_CONTEXT_TRACE(logFile, endString_.c_str());
621cdf0e10cSrcweir     }
622cdf0e10cSrcweir 
623cdf0e10cSrcweir private:
624cdf0e10cSrcweir     string startString_;
625cdf0e10cSrcweir     string endString_;
626cdf0e10cSrcweir };
627cdf0e10cSrcweir 
6284bafcef0SDamjan Jovanovic class BigPtrArrayPerformanceTest : public ::testing::Test
629cdf0e10cSrcweir {
630cdf0e10cSrcweir public:
BigPtrArrayPerformanceTest()631cdf0e10cSrcweir     BigPtrArrayPerformanceTest()
632cdf0e10cSrcweir     {
633cdf0e10cSrcweir     }
634cdf0e10cSrcweir 
6354bafcef0SDamjan Jovanovic protected:
test_insert_at_end(const char * numElements)636cdf0e10cSrcweir     void test_insert_at_end(const char* numElements)
637cdf0e10cSrcweir     {
638cdf0e10cSrcweir         char buff[100] = { 0 };
639cdf0e10cSrcweir         strcat(buff, "test_insert_at_end ");
640cdf0e10cSrcweir         strcat(buff, numElements);
641cdf0e10cSrcweir         int n = atoi(numElements);
642cdf0e10cSrcweir         PerformanceTracer tracer(buff);
643cdf0e10cSrcweir         BigPtrArray bparr;
644cdf0e10cSrcweir         for (int i = 0; i < n; i++)
645cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
646cdf0e10cSrcweir 
647cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
648cdf0e10cSrcweir     }
649cdf0e10cSrcweir 
test_insert_at_front(const char * numElements)650cdf0e10cSrcweir     void test_insert_at_front(const char* numElements)
651cdf0e10cSrcweir     {
652cdf0e10cSrcweir         char buff[100] = { 0 };
653cdf0e10cSrcweir         strcat(buff, "test_insert_at_front ");
654cdf0e10cSrcweir         strcat(buff, numElements);
655cdf0e10cSrcweir         int n = atoi(numElements);
656cdf0e10cSrcweir         PerformanceTracer tracer(buff);
657cdf0e10cSrcweir         BigPtrArray bparr;
658cdf0e10cSrcweir         for (int i = 0; i < n; i++)
659cdf0e10cSrcweir             bparr.Insert(new BigPtrEntryMock(i), 0);
660cdf0e10cSrcweir 
661cdf0e10cSrcweir         releaseBigPtrArrayContent(bparr);
662cdf0e10cSrcweir     }
663cdf0e10cSrcweir };
664cdf0e10cSrcweir 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_end_1000)6654bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_end_1000)
6664bafcef0SDamjan Jovanovic { test_insert_at_end("1000"); }
6674bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_end_10000)6684bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_end_10000)
6694bafcef0SDamjan Jovanovic { test_insert_at_end("10000"); }
6704bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_end_100000)6714bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_end_100000)
6724bafcef0SDamjan Jovanovic { test_insert_at_end("100000"); }
6734bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_end_1000000)6744bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_end_1000000)
6754bafcef0SDamjan Jovanovic { test_insert_at_end("1000000"); }
6764bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_front_1000)6774bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_front_1000)
6784bafcef0SDamjan Jovanovic { test_insert_at_front("1000"); }
6794bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_front_10000)6804bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_front_10000)
6814bafcef0SDamjan Jovanovic { test_insert_at_front("10000"); }
6824bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_front_100000)6834bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_front_100000)
6844bafcef0SDamjan Jovanovic { test_insert_at_front("100000"); }
6854bafcef0SDamjan Jovanovic 
TEST_F(BigPtrArrayPerformanceTest,test_insert_at_front_1000000)6864bafcef0SDamjan Jovanovic TEST_F(BigPtrArrayPerformanceTest, test_insert_at_front_1000000)
6874bafcef0SDamjan Jovanovic { test_insert_at_front("1000000"); }
6884bafcef0SDamjan Jovanovic 
689cdf0e10cSrcweir 
690cdf0e10cSrcweir //#####################################
691cdf0e10cSrcweir 
main(int argc,char ** argv)6924bafcef0SDamjan Jovanovic int main(int argc, char **argv)
6934bafcef0SDamjan Jovanovic {
6944bafcef0SDamjan Jovanovic     ::testing::InitGoogleTest(&argc, argv);
6954bafcef0SDamjan Jovanovic     return RUN_ALL_TESTS();
6964bafcef0SDamjan Jovanovic }
697