LCOV - code coverage report
Current view: top level - sw/qa/core - Test-BigPtrArray.cxx (source / functions) Hit Total Coverage
Test: commit 0e63ca4fde4e446f346e35849c756a30ca294aab Lines: 320 321 99.7 %
Date: 2014-04-11 Functions: 37 37 100.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10