LCOV - code coverage report
Current view: top level - sw/qa/core - Test-BigPtrArray.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 267 268 99.6 %
Date: 2015-06-13 12:38:46 Functions: 35 35 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             : #include <ndarr.hxx>
      34             : 
      35             : using namespace std;
      36             : 
      37             : namespace /* private */
      38             : {
      39             :     const sal_uLong NUM_ENTRIES = 10;
      40             : 
      41             :     class BigPtrEntryMock : public BigPtrEntry
      42             :     {
      43             :     public:
      44         147 :         explicit BigPtrEntryMock(sal_uLong count) : count_(count)
      45             :         {
      46         147 :         }
      47             : 
      48         294 :         virtual ~BigPtrEntryMock()
      49         147 :         {
      50         294 :         }
      51             : 
      52         212 :         sal_uLong getCount() const
      53             :         {
      54         212 :             return count_;
      55             :         }
      56             : 
      57         234 :         sal_uLong Position() const
      58             :         {
      59         234 :             return GetPos();
      60             :         }
      61             : 
      62             :     private:
      63             :         sal_uLong count_;
      64             :     };
      65             : 
      66          81 :     void dumpBigPtrArray(const BigPtrArray& bparr)
      67             :     {
      68             :         (void)bparr;
      69          81 :     }
      70             : 
      71          12 :     void fillBigPtrArray(BigPtrArray& bparr, sal_uLong numEntries)
      72             :     {
      73         132 :         for (sal_uLong i = 0; i < numEntries; i++)
      74         120 :             bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
      75          12 :     }
      76             : 
      77          14 :     void printMethodName(const char* name)
      78             :     {
      79             :         (void)name;
      80          14 :     }
      81             : 
      82          42 :     bool checkElementPositions(const BigPtrArray& bparr)
      83             :     {
      84         276 :         for (sal_uLong i = 0; i < bparr.Count(); i++)
      85             :         {
      86         234 :             if (static_cast<BigPtrEntryMock*>(bparr[i])->Position() != i)
      87           0 :                 return false;
      88             :         }
      89          42 :         return true;
      90             :     }
      91             : 
      92           9 :     void releaseBigPtrArrayContent(BigPtrArray& bparr)
      93             :     {
      94         106 :         for (sal_uLong i = 0; i < bparr.Count(); i++)
      95          97 :             delete bparr[i];
      96           9 :     }
      97             : }
      98             : 
      99          28 : class BigPtrArrayUnittest : public CppUnit::TestFixture
     100             : {
     101             : public:
     102             : 
     103          14 :     BigPtrArrayUnittest()
     104          14 :     {
     105          14 :     }
     106             : 
     107             :     /** Test constructor/destructor
     108             :         The size of the BigPtrArray
     109             :         aka the 'Count' should be 0
     110             :         initially.
     111             :     */
     112           1 :     void test_ctor()
     113             :     {
     114           1 :         printMethodName("test_ctor\n");
     115             : 
     116           1 :         BigPtrArray bparr;
     117             : 
     118           2 :         CPPUNIT_ASSERT_MESSAGE
     119             :         (
     120             :             "BigPtrArray ctor failed",
     121             :             bparr.Count() == 0
     122           2 :         );
     123           1 :     }
     124             : 
     125           1 :     void test_insert_entries_at_front()
     126             :     {
     127           1 :         printMethodName("test_insert_entries_at_front\n");
     128             : 
     129           1 :         BigPtrArray bparr;
     130             : 
     131          11 :         for (sal_uLong i = 0; i < NUM_ENTRIES; i++)
     132             :         {
     133          10 :             sal_uLong oldCount = bparr.Count();
     134          10 :             bparr.Insert(new BigPtrEntryMock(i), 0);
     135          20 :             CPPUNIT_ASSERT_MESSAGE
     136             :             (
     137             :                 "test_insert_entries_at_front failed",
     138             :                 (bparr.Count() == oldCount + 1)
     139          10 :             );
     140             :         }
     141             : 
     142          11 :         for (sal_uLong i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
     143             :         {
     144          20 :             CPPUNIT_ASSERT_MESSAGE
     145             :             (
     146             :                 "test_insert_entries_at_front failed",
     147             :                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == j
     148          10 :             );
     149             :         }
     150             : 
     151           2 :         CPPUNIT_ASSERT_MESSAGE
     152             :         (
     153             :             "test_insert_entries_at_front failed",
     154             :             checkElementPositions(bparr)
     155           1 :         );
     156             : 
     157           1 :         releaseBigPtrArrayContent(bparr);
     158           1 :         dumpBigPtrArray(bparr);
     159           1 :     }
     160             : 
     161           1 :     void test_insert_entries_in_the_middle()
     162             :     {
     163           1 :         printMethodName("test_insert_entries_in_the_middle\n");
     164             : 
     165           1 :         BigPtrArray bparr;
     166             : 
     167           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     168           1 :         dumpBigPtrArray(bparr);
     169             : 
     170           1 :         sal_uLong oldCount = bparr.Count();
     171             : 
     172           1 :         bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count() / 2);
     173             : 
     174           2 :         CPPUNIT_ASSERT_MESSAGE
     175             :         (
     176             :             "test_insert_entries_in_the_middle failed",
     177             :             (oldCount + 1 == bparr.Count() && static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount() == NUM_ENTRIES)
     178           1 :         );
     179             : 
     180           2 :         CPPUNIT_ASSERT_MESSAGE
     181             :         (
     182             :             "test_insert_entries_in_the_middle failed",
     183             :             checkElementPositions(bparr)
     184           1 :         );
     185             : 
     186           1 :         releaseBigPtrArrayContent(bparr);
     187           1 :         dumpBigPtrArray(bparr);
     188           1 :     }
     189             : 
     190           1 :     void test_insert_at_already_used_index()
     191             :     {
     192           1 :         printMethodName("test_insert_at_already_used_index\n");
     193             : 
     194           1 :         BigPtrArray bparr;
     195             : 
     196           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     197           1 :         dumpBigPtrArray(bparr);
     198             : 
     199           1 :         const sal_uLong oldCount = bparr.Count();
     200             : 
     201             :         // insert 5 elements
     202           6 :         for (sal_uLong i = 0, j = 30; i < 5; i++, j++)
     203           5 :             bparr.Insert(new BigPtrEntryMock(j), i);
     204             : 
     205           2 :         CPPUNIT_ASSERT_MESSAGE
     206             :         (
     207             :             "test_insert_at_already_used_index failed",
     208             :             (oldCount + 5 == bparr.Count())
     209           1 :         );
     210             : 
     211             :         // now, first 5 elements have counts: 30,31,..34
     212             :         // next 10 elements have counts: 0,1,..9
     213          16 :         for (sal_uLong i = 0, j = 30; i < bparr.Count(); i++, j++)
     214             :         {
     215          30 :             CPPUNIT_ASSERT_MESSAGE
     216             :             (
     217             :                 "test_insert_at_already_used_index failed",
     218             :                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i < 5 ? j : i - 5)
     219          15 :             );
     220             :         }
     221             : 
     222           2 :         CPPUNIT_ASSERT_MESSAGE
     223             :         (
     224             :             "test_insert_at_already_used_index failed",
     225             :             checkElementPositions(bparr)
     226           1 :         );
     227             : 
     228           1 :         releaseBigPtrArrayContent(bparr);
     229           1 :         dumpBigPtrArray(bparr);
     230           1 :     }
     231             : 
     232           1 :     void test_insert_at_end()
     233             :     {
     234           1 :         printMethodName("test_insert_at_end\n");
     235             : 
     236           1 :         BigPtrArray bparr;
     237             : 
     238           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     239           1 :         dumpBigPtrArray(bparr);
     240             : 
     241           1 :         sal_uLong oldCount = bparr.Count();
     242           1 :         bparr.Insert(new BigPtrEntryMock(NUM_ENTRIES), bparr.Count());
     243             : 
     244           2 :         CPPUNIT_ASSERT_MESSAGE
     245             :         (
     246             :             "test_insert_at_end failed",
     247             :             (oldCount + 1 == bparr.Count() && static_cast<BigPtrEntryMock*>(bparr[bparr.Count()-1])->getCount() == NUM_ENTRIES)
     248           1 :         );
     249             : 
     250           2 :         CPPUNIT_ASSERT_MESSAGE
     251             :         (
     252             :             "test_insert_at_end failed",
     253             :             checkElementPositions(bparr)
     254           1 :         );
     255             : 
     256           1 :         releaseBigPtrArrayContent(bparr);
     257           1 :         dumpBigPtrArray(bparr);
     258           1 :     }
     259             : 
     260           1 :     void test_remove_at_front()
     261             :     {
     262           1 :         printMethodName("test_remove_at_front\n");
     263             : 
     264           1 :         BigPtrArray bparr;
     265             : 
     266           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     267           1 :         dumpBigPtrArray(bparr);
     268             : 
     269          11 :         for (sal_uLong i = 0; i < NUM_ENTRIES; i++)
     270             :         {
     271          10 :             sal_uLong oldCount = bparr.Count();
     272             : 
     273          10 :             delete bparr[0]; // release content
     274          10 :             bparr.Remove(0); // remove item from container
     275             : 
     276          20 :             CPPUNIT_ASSERT_MESSAGE
     277             :             (
     278             :                 "test_remove_at_front failed (wrong count)",
     279             :                 (oldCount - 1 == bparr.Count())
     280          10 :             );
     281             : 
     282          55 :             for (sal_uLong j = 0, k = i + 1; j < bparr.Count(); j++, k++)
     283             :             {
     284          90 :                 CPPUNIT_ASSERT_MESSAGE
     285             :                 (
     286             :                     "test_remove_at_front failed",
     287             :                     static_cast<BigPtrEntryMock*>(bparr[j])->getCount() == k
     288          45 :                 );
     289             :             }
     290             : 
     291          20 :             CPPUNIT_ASSERT_MESSAGE
     292             :             (
     293             :                 "test_remove_at_front failed",
     294             :                 checkElementPositions(bparr)
     295          10 :             );
     296             : 
     297          10 :             dumpBigPtrArray(bparr);
     298           1 :         }
     299           1 :     }
     300             : 
     301           1 :     void test_remove_at_back()
     302             :     {
     303           1 :         printMethodName("test_remove_at_back\n");
     304             : 
     305           1 :         BigPtrArray bparr;
     306             : 
     307           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     308           1 :         dumpBigPtrArray(bparr);
     309             : 
     310          11 :         for (int i = NUM_ENTRIES - 1; i >= 0; i--)
     311             :         {
     312          10 :             sal_uLong oldCount = bparr.Count();
     313          10 :             delete bparr[i];
     314          10 :             bparr.Remove(i);
     315             : 
     316          20 :             CPPUNIT_ASSERT_MESSAGE
     317             :             (
     318             :                 "test_remove_at_back failed (wrong count)",
     319             :                 (oldCount - 1 == bparr.Count())
     320          10 :             );
     321             : 
     322          55 :             for (sal_uLong j = 0; j < bparr.Count(); j++)
     323             :             {
     324          90 :                 CPPUNIT_ASSERT_MESSAGE
     325             :                 (
     326             :                     "test_remove_at_back failed",
     327             :                     static_cast<BigPtrEntryMock*>(bparr[j])->getCount() == j
     328          45 :                 );
     329             :             }
     330             : 
     331          20 :             CPPUNIT_ASSERT_MESSAGE
     332             :             (
     333             :                 "test_remove_at_back failed",
     334             :                 checkElementPositions(bparr)
     335          10 :             );
     336             : 
     337          10 :             dumpBigPtrArray(bparr);
     338           1 :         }
     339           1 :     }
     340             : 
     341           1 :     void test_remove_in_the_middle()
     342             :     {
     343           1 :         printMethodName("test_remove_in_the_middle\n");
     344             : 
     345           1 :         BigPtrArray bparr;
     346             : 
     347           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     348           1 :         dumpBigPtrArray(bparr);
     349             : 
     350          12 :         while (bparr.Count())
     351             :         {
     352          10 :             sal_uLong oldCount = bparr.Count();
     353          10 :             sal_uLong oldElement = static_cast<BigPtrEntryMock*>(bparr[bparr.Count() / 2])->getCount();
     354             : 
     355          10 :             delete bparr[bparr.Count() / 2];
     356          10 :             bparr.Remove(bparr.Count() / 2);
     357             : 
     358          20 :             CPPUNIT_ASSERT_MESSAGE
     359             :             (
     360             :                 "test_remove_in_the_middle failed (wrong count)",
     361             :                 (oldCount - 1 == bparr.Count())
     362          10 :             );
     363             : 
     364          55 :             for (sal_uLong i = 0; i < bparr.Count(); i++)
     365             :             {
     366          90 :                 CPPUNIT_ASSERT_MESSAGE
     367             :                 (
     368             :                     "test_remove_in_the_middle failed",
     369             :                     static_cast<BigPtrEntryMock*>(bparr[i])->getCount() != oldElement
     370          45 :                 );
     371             :             }
     372             : 
     373          20 :             CPPUNIT_ASSERT_MESSAGE
     374             :             (
     375             :                 "test_remove_in_the_middle failed",
     376             :                 checkElementPositions(bparr)
     377          10 :             );
     378             : 
     379          10 :             dumpBigPtrArray(bparr);
     380           1 :         }
     381           1 :     }
     382             : 
     383           1 :     void test_remove_multiple_elements_at_once()
     384             :     {
     385           1 :         printMethodName("test_remove_multiple_elements_at_once\n");
     386             : 
     387           1 :         BigPtrArray bparr;
     388             : 
     389           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     390           1 :         dumpBigPtrArray(bparr);
     391             : 
     392           6 :         while(bparr.Count())
     393             :         {
     394           4 :             sal_uLong nRemove = (bparr.Count() > 3) ? 3 : bparr.Count();
     395           4 :             sal_uLong oldCount = bparr.Count();
     396             : 
     397          14 :             for (sal_uLong i = 0; i < nRemove; i++)
     398          10 :                 delete bparr[i];
     399             : 
     400           4 :             bparr.Remove(0, nRemove);
     401             : 
     402           8 :             CPPUNIT_ASSERT_MESSAGE
     403             :             (
     404             :                 "test_remove_multiple_elements_at_once failed",
     405             :                 (oldCount - nRemove == bparr.Count())
     406           4 :             );
     407             : 
     408           8 :             CPPUNIT_ASSERT_MESSAGE
     409             :             (
     410             :                 "test_remove_multiple_elements_at_once failed",
     411             :                 checkElementPositions(bparr)
     412           4 :             );
     413             : 
     414           4 :             dumpBigPtrArray(bparr);
     415           1 :         }
     416           1 :     }
     417             : 
     418           1 :     void test_remove_all_elements_at_once()
     419             :     {
     420           1 :         printMethodName("test_remove_all_elements_at_once\n");
     421             : 
     422           1 :         BigPtrArray bparr;
     423             : 
     424           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     425           1 :         dumpBigPtrArray(bparr);
     426             : 
     427           1 :         releaseBigPtrArrayContent(bparr);
     428           1 :         bparr.Remove(0, bparr.Count());
     429             : 
     430           2 :         CPPUNIT_ASSERT_MESSAGE
     431             :         (
     432             :             "test_remove_all_elements_at_once failed",
     433             :             bparr.Count() == 0
     434           1 :         );
     435             : 
     436           1 :         dumpBigPtrArray(bparr);
     437           1 :     }
     438             : 
     439           1 :     void test_move_elements_from_lower_to_higher_pos()
     440             :     {
     441           1 :         printMethodName("test_move_elements_from_lower_to_higher_pos\n");
     442             : 
     443           1 :         BigPtrArray bparr;
     444             : 
     445           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     446           1 :         dumpBigPtrArray(bparr);
     447             : 
     448          10 :         for (sal_uLong i = 0; i < NUM_ENTRIES - 1; i++)
     449             :         {
     450           9 :             bparr.Move(i, i + 2);
     451           9 :             dumpBigPtrArray(bparr);
     452             :         }
     453             : 
     454          10 :         for (sal_uLong i = 0; i < (NUM_ENTRIES - 1); i++)
     455             :         {
     456          18 :             CPPUNIT_ASSERT_MESSAGE
     457             :             (
     458             :                 "test_move_elements_from_lower_to_higher_pos failed",
     459             :                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i + 1)
     460           9 :             );
     461             :         }
     462             : 
     463           2 :         CPPUNIT_ASSERT_MESSAGE
     464             :         (
     465             :             "test_move_elements_from_lower_to_higher_pos failed",
     466             :             static_cast<BigPtrEntryMock*>(bparr[NUM_ENTRIES -1])->getCount() == 0
     467           1 :         );
     468             : 
     469           2 :         CPPUNIT_ASSERT_MESSAGE
     470             :         (
     471             :             "test_move_elements_from_lower_to_higher_pos failed",
     472             :             checkElementPositions(bparr)
     473           1 :         );
     474             : 
     475           1 :         releaseBigPtrArrayContent(bparr);
     476           1 :     }
     477             : 
     478           1 :     void test_move_elements_from_higher_to_lower_pos()
     479             :     {
     480           1 :         printMethodName("test_move_elements_from_higher_to_lower_pos\n");
     481             : 
     482           1 :         BigPtrArray bparr;
     483             : 
     484           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     485           1 :         dumpBigPtrArray(bparr);
     486             : 
     487          10 :         for (int i = NUM_ENTRIES - 1; i >= 1; i--)
     488             :         {
     489           9 :             bparr.Move(i, i - 1);
     490           9 :             dumpBigPtrArray(bparr);
     491             :         }
     492             : 
     493           2 :         CPPUNIT_ASSERT_MESSAGE
     494             :         (
     495             :             "test_move_elements_from_higher_to_lower_pos failed",
     496             :             static_cast<BigPtrEntryMock*>(bparr[0])->getCount() == (NUM_ENTRIES - 1)
     497           1 :         );
     498             : 
     499          10 :         for (sal_uLong i = 1; i < NUM_ENTRIES; i++)
     500             :         {
     501          18 :             CPPUNIT_ASSERT_MESSAGE
     502             :             (
     503             :                 "test_move_elements_from_higher_to_lower_pos failed",
     504             :                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (i - 1)
     505           9 :             );
     506             :         }
     507             : 
     508           2 :         CPPUNIT_ASSERT_MESSAGE
     509             :         (
     510             :             "test_move_elements_from_higher_to_lower_pos failed",
     511             :             checkElementPositions(bparr)
     512           1 :         );
     513             : 
     514           1 :         releaseBigPtrArrayContent(bparr);
     515           1 :     }
     516             : 
     517           1 :     void test_move_to_same_position()
     518             :     {
     519           1 :         printMethodName("test_move_to_same_position\n");
     520             : 
     521           1 :         BigPtrArray bparr;
     522             : 
     523           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     524           1 :         dumpBigPtrArray(bparr);
     525             : 
     526          11 :         for (sal_uLong i = 0; i < NUM_ENTRIES; i++)
     527             :         {
     528          10 :             bparr.Move(i, i);
     529             :         }
     530             : 
     531           1 :         dumpBigPtrArray(bparr);
     532             : 
     533          11 :         for (sal_uLong i = 0; i < NUM_ENTRIES; i++)
     534             :         {
     535          20 :             CPPUNIT_ASSERT_MESSAGE
     536             :             (
     537             :                 "test_move_to_same_position failed",
     538             :                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == i
     539          10 :             );
     540             :         }
     541             : 
     542           2 :         CPPUNIT_ASSERT_MESSAGE
     543             :         (
     544             :             "test_move_to_same_position failed",
     545             :             checkElementPositions(bparr)
     546           1 :         );
     547             : 
     548           1 :         releaseBigPtrArrayContent(bparr);
     549           1 :         dumpBigPtrArray(bparr);
     550           1 :     }
     551             : 
     552           1 :     void test_replace_elements()
     553             :     {
     554           1 :         printMethodName("test_replace_elements\n");
     555             : 
     556           1 :         BigPtrArray bparr;
     557             : 
     558           1 :         fillBigPtrArray(bparr, NUM_ENTRIES);
     559           1 :         dumpBigPtrArray(bparr);
     560             : 
     561          11 :         for (sal_uLong i = 0, j = NUM_ENTRIES - 1; i < NUM_ENTRIES; i++, j--)
     562             :         {
     563          10 :             delete bparr[i];
     564          10 :             bparr.Replace(i, new BigPtrEntryMock(j));
     565          10 :             dumpBigPtrArray(bparr);
     566             :         }
     567             : 
     568          11 :         for (sal_uLong i = 0; i < NUM_ENTRIES; i++)
     569             :         {
     570          20 :             CPPUNIT_ASSERT_MESSAGE
     571             :             (
     572             :                 "test_replace_elements failed",
     573             :                 static_cast<BigPtrEntryMock*>(bparr[i])->getCount() == (NUM_ENTRIES - i - 1)
     574          10 :             );
     575             :         }
     576             : 
     577           2 :         CPPUNIT_ASSERT_MESSAGE
     578             :         (
     579             :             "test_replace_elements failed",
     580             :             checkElementPositions(bparr)
     581           1 :         );
     582             : 
     583           1 :         releaseBigPtrArrayContent(bparr);
     584           1 :     }
     585             : 
     586           2 :     CPPUNIT_TEST_SUITE(BigPtrArrayUnittest);
     587           1 :     CPPUNIT_TEST(test_ctor);
     588           1 :     CPPUNIT_TEST(test_insert_entries_at_front);
     589           1 :     CPPUNIT_TEST(test_insert_entries_in_the_middle);
     590           1 :     CPPUNIT_TEST(test_insert_at_already_used_index);
     591           1 :     CPPUNIT_TEST(test_insert_at_end);
     592           1 :     CPPUNIT_TEST(test_remove_at_front);
     593           1 :     CPPUNIT_TEST(test_remove_at_back);
     594           1 :     CPPUNIT_TEST(test_remove_in_the_middle);
     595           1 :     CPPUNIT_TEST(test_remove_multiple_elements_at_once);
     596           1 :     CPPUNIT_TEST(test_remove_all_elements_at_once);
     597           1 :     CPPUNIT_TEST(test_move_elements_from_lower_to_higher_pos);
     598           1 :     CPPUNIT_TEST(test_move_elements_from_higher_to_lower_pos);
     599           1 :     CPPUNIT_TEST(test_move_to_same_position);
     600           1 :     CPPUNIT_TEST(test_replace_elements);
     601           5 :     CPPUNIT_TEST_SUITE_END();
     602             : };
     603             : 
     604             : const char* START = "START: ";
     605             : const char* END = "END: ";
     606             : 
     607             : #if defined TIMELOG
     608             : 
     609             : class PerformanceTracer
     610             : {
     611             : public:
     612             : 
     613             : public:
     614             :     explicit PerformanceTracer(const string& methodName) :
     615             :         startString_(START),
     616             :         endString_(END)
     617             :     {
     618             :         startString_ += methodName;
     619             :         endString_ += methodName;
     620             :     }
     621             : 
     622             :     ~PerformanceTracer()
     623             :     {
     624             :     }
     625             : 
     626             : private:
     627             :     string startString_;
     628             :     string endString_;
     629             : };
     630             : 
     631             : class BigPtrArrayPerformanceTest : public CppUnit::TestFixture
     632             : {
     633             : public:
     634             :     BigPtrArrayPerformanceTest()
     635             :     {
     636             :     }
     637             : 
     638             :     void test_insert_at_end_1000()
     639             :     { test_insert_at_end("1000"); }
     640             : 
     641             :     void test_insert_at_end_10000()
     642             :     { test_insert_at_end("10000"); }
     643             : 
     644             :     void test_insert_at_end_100000()
     645             :     { test_insert_at_end("100000"); }
     646             : 
     647             :     void test_insert_at_end_1000000()
     648             :     { test_insert_at_end("1000000"); }
     649             : 
     650             :     void test_insert_at_front_1000()
     651             :     { test_insert_at_front("1000"); }
     652             : 
     653             :     void test_insert_at_front_10000()
     654             :     { test_insert_at_front("10000"); }
     655             : 
     656             :     void test_insert_at_front_100000()
     657             :     { test_insert_at_front("100000"); }
     658             : 
     659             :     void test_insert_at_front_1000000()
     660             :     { test_insert_at_front("1000000"); }
     661             : 
     662             :     CPPUNIT_TEST_SUITE(BigPtrArrayPerformanceTest);
     663             :     CPPUNIT_TEST(test_insert_at_end_1000);
     664             :     CPPUNIT_TEST(test_insert_at_end_10000);
     665             :     CPPUNIT_TEST(test_insert_at_end_100000);
     666             :     CPPUNIT_TEST(test_insert_at_end_1000000);
     667             :     CPPUNIT_TEST(test_insert_at_front_1000);
     668             :     CPPUNIT_TEST(test_insert_at_front_10000);
     669             :     CPPUNIT_TEST(test_insert_at_front_100000);
     670             :     CPPUNIT_TEST(test_insert_at_front_1000000);
     671             :     CPPUNIT_TEST_SUITE_END();
     672             : 
     673             : private:
     674             :     void test_insert_at_end(const char* numElements)
     675             :     {
     676             :         OStringBuffer buff("test_insert_at_end ");
     677             :         buff.append(numElements);
     678             :         int n = atoi(numElements);
     679             :         PerformanceTracer tracer(buff.getStr());
     680             :         BigPtrArray bparr;
     681             :         for (int i = 0; i < n; i++)
     682             :             bparr.Insert(new BigPtrEntryMock(i), bparr.Count());
     683             : 
     684             :         releaseBigPtrArrayContent(bparr);
     685             :     }
     686             : 
     687             :     void test_insert_at_front(const char* numElements)
     688             :     {
     689             :         OStringBuffer buff("test_insert_at_front ");
     690             :         buff.append(numElements);
     691             :         int n = atoi(numElements);
     692             :         PerformanceTracer tracer(buff.getStr());
     693             :         BigPtrArray bparr;
     694             :         for (int i = 0; i < n; i++)
     695             :             bparr.Insert(new BigPtrEntryMock(i), 0);
     696             : 
     697             :         releaseBigPtrArrayContent(bparr);
     698             :     }
     699             : };
     700             : 
     701             : #endif
     702             : 
     703             : // register test suites
     704           3 : CPPUNIT_TEST_SUITE_REGISTRATION(BigPtrArrayUnittest);
     705             : #ifdef TIMELOG
     706             : CPPUNIT_TEST_SUITE_REGISTRATION(BigPtrArrayPerformanceTest);
     707             : #endif
     708             : 
     709             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11