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