LTP GCOV extension - code coverage report
Current view: directory - testsuite - IteratorTest.cc
Test: STX B+ Tree Testsuite
Date: 2008-09-07 Instrumented lines: 351
Code covered: 99.7 % Executed lines: 350
Legend: not executed executed

       1                 : // $Id: IteratorTest.cc 113 2008-09-07 15:25:51Z tb $
       2                 : 
       3                 : /*
       4                 :  * STX B+ Tree Template Classes v0.8.3
       5                 :  * Copyright (C) 2008 Timo Bingmann
       6                 :  *
       7                 :  * This library is free software; you can redistribute it and/or modify it
       8                 :  * under the terms of the GNU Lesser General Public License as published by the
       9                 :  * Free Software Foundation; either version 2.1 of the License, or (at your
      10                 :  * option) any later version.
      11                 :  *
      12                 :  * This library is distributed in the hope that it will be useful, but WITHOUT
      13                 :  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14                 :  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
      15                 :  * for more details.
      16                 :  *
      17                 :  * You should have received a copy of the GNU Lesser General Public License
      18                 :  * along with this library; if not, write to the Free Software Foundation,
      19                 :  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
      20                 :  */
      21                 : 
      22                 : #include <cppunit/extensions/HelperMacros.h>
      23                 : 
      24                 : #include <stdlib.h>
      25                 : 
      26                 : #include <vector>
      27                 : 
      28                 : #include <stx/btree_multiset.h>
      29                 : #include <stx/btree_multimap.h>
      30                 : #include <stx/btree_map.h>
      31                 : #include <stx/btree_set.h>
      32                 : 
      33                 : class IteratorTest : public CPPUNIT_NS::TestFixture
      34              10 : {
      35               3 :     CPPUNIT_TEST_SUITE( IteratorTest );
      36               1 :     CPPUNIT_TEST(test_iterator1);
      37               2 :     CPPUNIT_TEST(test_iterator2);
      38               2 :     CPPUNIT_TEST(test_iterator3);
      39               2 :     CPPUNIT_TEST(test_iterator4);
      40               2 :     CPPUNIT_TEST(test_iterator5);
      41               2 :     CPPUNIT_TEST_SUITE_END();
      42                 : 
      43                 : protected:
      44                 : 
      45                 :     struct traits_nodebug
      46                 :     {
      47                 :         static const bool       selfverify = true;
      48                 :         static const bool       debug = false;
      49                 : 
      50                 :         static const int        leafslots = 8;
      51                 :         static const int        innerslots = 8;
      52                 :     };
      53                 : 
      54               1 :     void test_iterator1()
      55                 :     {
      56                 :         typedef stx::btree_multiset<unsigned int,
      57                 :             std::less<unsigned int>, struct traits_nodebug> btree_type;
      58                 : 
      59               1 :         std::vector<unsigned int> vector;
      60                 : 
      61               1 :         srand(34234235);
      62            3201 :         for(unsigned int i = 0; i < 3200; i++)
      63                 :         {
      64            3200 :             vector.push_back( rand() % 1000 );
      65                 :         }
      66                 : 
      67               1 :         CPPUNIT_ASSERT( vector.size() == 3200 );
      68                 : 
      69                 :         // test construction and insert(iter, iter) function
      70               2 :         btree_type bt(vector.begin(), vector.end());
      71                 : 
      72               1 :         CPPUNIT_ASSERT( bt.size() == 3200 );
      73                 : 
      74                 :         // copy for later use
      75               1 :         btree_type bt2 = bt;
      76                 : 
      77                 :         // empty out the first bt
      78               1 :         srand(34234235);
      79            6402 :         for(unsigned int i = 0; i < 3200; i++)
      80                 :         {
      81            3200 :             CPPUNIT_ASSERT(bt.size() == 3200 - i);
      82            6400 :             CPPUNIT_ASSERT( bt.erase_one(rand() % 1000) );
      83            6400 :             CPPUNIT_ASSERT(bt.size() == 3200 - i - 1);
      84                 :         }
      85                 : 
      86               1 :         CPPUNIT_ASSERT( bt.empty() );
      87                 : 
      88                 :         // copy btree values back to a vector
      89                 : 
      90               2 :         std::vector<unsigned int> vector2;
      91               2 :         vector2.assign( bt2.begin(), bt2.end() );
      92                 : 
      93                 :         // afer sorting the vector, the two must be the same
      94               1 :         std::sort(vector.begin(), vector.end());
      95                 : 
      96               1 :         CPPUNIT_ASSERT( vector == vector2 );
      97                 : 
      98                 :         // test reverse iterator
      99               1 :         vector2.clear();
     100               1 :         vector2.assign( bt2.rbegin(), bt2.rend() );
     101                 : 
     102               1 :         std::reverse(vector.begin(), vector.end());
     103                 : 
     104               1 :         btree_type::reverse_iterator ri = bt2.rbegin();
     105            6402 :         for(unsigned int i = 0; i < vector2.size(); ++i)
     106                 :         {
     107            3200 :             CPPUNIT_ASSERT( vector[i] == vector2[i] );
     108            6400 :             CPPUNIT_ASSERT( vector[i] == *ri );
     109                 : 
     110            3200 :             ri++;
     111                 :         }
     112                 : 
     113               1 :         CPPUNIT_ASSERT( ri == bt2.rend() );
     114               1 :     }
     115                 : 
     116               1 :     void test_iterator2()
     117                 :     {
     118                 :         typedef stx::btree_multimap<unsigned int, unsigned int,
     119                 :             std::less<unsigned int>, struct traits_nodebug> btree_type;
     120                 : 
     121               1 :         std::vector< btree_type::value_type > vector;
     122                 : 
     123               1 :         srand(34234235);
     124            3201 :         for(unsigned int i = 0; i < 3200; i++)
     125                 :         {
     126            3200 :             vector.push_back( btree_type::value_type(rand() % 1000, 0) );
     127                 :         }
     128                 : 
     129               1 :         CPPUNIT_ASSERT( vector.size() == 3200 );
     130                 : 
     131                 :         // test construction and insert(iter, iter) function
     132               2 :         btree_type bt(vector.begin(), vector.end());
     133                 : 
     134               1 :         CPPUNIT_ASSERT( bt.size() == 3200 );
     135                 : 
     136                 :         // copy for later use
     137               1 :         btree_type bt2 = bt;
     138                 : 
     139                 :         // empty out the first bt
     140               1 :         srand(34234235);
     141            6402 :         for(unsigned int i = 0; i < 3200; i++)
     142                 :         {
     143            3200 :             CPPUNIT_ASSERT(bt.size() == 3200 - i);
     144            6400 :             CPPUNIT_ASSERT( bt.erase_one(rand() % 1000) );
     145            6400 :             CPPUNIT_ASSERT(bt.size() == 3200 - i - 1);
     146                 :         }
     147                 : 
     148               1 :         CPPUNIT_ASSERT( bt.empty() );
     149                 : 
     150                 :         // copy btree values back to a vector
     151                 : 
     152               2 :         std::vector< btree_type::value_type > vector2;
     153               2 :         vector2.assign( bt2.begin(), bt2.end() );
     154                 : 
     155                 :         // afer sorting the vector, the two must be the same
     156               1 :         std::sort(vector.begin(), vector.end());
     157                 : 
     158               1 :         CPPUNIT_ASSERT( vector == vector2 );
     159                 : 
     160                 :         // test reverse iterator
     161               1 :         vector2.clear();
     162               1 :         vector2.assign( bt2.rbegin(), bt2.rend() );
     163                 : 
     164               1 :         std::reverse(vector.begin(), vector.end());
     165                 : 
     166               1 :         btree_type::reverse_iterator ri = bt2.rbegin();
     167            6402 :         for(unsigned int i = 0; i < vector2.size(); ++i, ++ri)
     168                 :         {
     169            3200 :             CPPUNIT_ASSERT( vector[i].first == vector2[i].first );
     170            6400 :             CPPUNIT_ASSERT( vector[i].first == ri->first );
     171            6400 :             CPPUNIT_ASSERT( vector[i].second == ri->second );
     172                 :         }
     173                 : 
     174               1 :         CPPUNIT_ASSERT( ri == bt2.rend() );
     175               1 :     }
     176                 : 
     177               1 :     void test_iterator3()
     178                 :     {
     179                 :         typedef stx::btree_map<unsigned int, unsigned int,
     180                 :             std::less<unsigned int>, struct traits_nodebug> btree_type;
     181                 : 
     182               1 :         btree_type map;
     183                 : 
     184               1 :         unsigned int maxnum = 1000;
     185                 : 
     186            1001 :         for(unsigned int i = 0; i < maxnum; ++i)
     187                 :         {
     188            1000 :             map.insert( std::make_pair(i, i*3) );
     189                 :         }
     190                 : 
     191                 :         { // test iterator prefix++
     192               1 :             unsigned int nownum = 0;
     193                 : 
     194            2002 :             for(btree_type::iterator i = map.begin();
     195                 :                 i != map.end(); ++i)
     196                 :             {
     197            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     198            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     199                 : 
     200            1000 :                 nownum++;
     201                 :             }
     202                 : 
     203               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     204                 :         }
     205                 : 
     206                 :         { // test iterator prefix--
     207               1 :             unsigned int nownum = maxnum;
     208                 : 
     209               1 :             btree_type::iterator i;
     210            2000 :             for(i = --map.end(); i != map.begin(); --i)
     211                 :             {
     212             999 :                 nownum--;
     213                 : 
     214             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     215            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     216                 :             }
     217                 : 
     218               1 :             nownum--;
     219                 : 
     220               1 :             CPPUNIT_ASSERT( nownum == i->first );
     221               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     222                 : 
     223               2 :             CPPUNIT_ASSERT(nownum == 0);
     224                 :         }
     225                 : 
     226                 :         { // test const_iterator prefix++
     227               1 :             unsigned int nownum = 0;
     228                 : 
     229            2003 :             for(btree_type::const_iterator i = map.begin();
     230                 :                 i != map.end(); ++i)
     231                 :             {
     232            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     233            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     234                 : 
     235            1000 :                 nownum++;
     236                 :             }
     237                 : 
     238               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     239                 :         }
     240                 : 
     241                 :         { // test const_iterator prefix--
     242               1 :             unsigned int nownum = maxnum;
     243                 : 
     244               1 :             btree_type::const_iterator i;
     245            2000 :             for(i = --map.end(); i != map.begin(); --i)
     246                 :             {
     247             999 :                 nownum--;
     248                 : 
     249             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     250            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     251                 :             }
     252                 : 
     253               1 :             nownum--;
     254                 : 
     255               1 :             CPPUNIT_ASSERT( nownum == i->first );
     256               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     257                 : 
     258               2 :             CPPUNIT_ASSERT(nownum == 0);
     259                 :         }
     260                 : 
     261                 :         { // test reverse_iterator prefix++
     262               1 :             unsigned int nownum = maxnum;
     263                 : 
     264            2003 :             for(btree_type::reverse_iterator i = map.rbegin();
     265                 :                 i != map.rend(); ++i)
     266                 :             {
     267            1000 :                 nownum--;
     268                 : 
     269            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     270            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     271                 :             }
     272                 : 
     273               1 :             CPPUNIT_ASSERT(nownum == 0);
     274                 :         }
     275                 : 
     276                 :         { // test reverse_iterator prefix--
     277               1 :             unsigned int nownum = 0;
     278                 : 
     279               1 :             btree_type::reverse_iterator i;
     280            2000 :             for(i = --map.rend(); i != map.rbegin(); --i)
     281                 :             {
     282             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     283            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     284                 : 
     285             999 :                 nownum++;
     286                 :             }
     287                 : 
     288               1 :             CPPUNIT_ASSERT( nownum == i->first );
     289               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     290                 : 
     291               1 :             nownum++;
     292                 : 
     293               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     294                 :         }
     295                 : 
     296                 :         { // test const_reverse_iterator prefix++
     297               1 :             unsigned int nownum = maxnum;
     298                 : 
     299            2003 :             for(btree_type::const_reverse_iterator i = map.rbegin();
     300                 :                 i != map.rend(); ++i)
     301                 :             {
     302            1000 :                 nownum--;
     303                 : 
     304            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     305            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     306                 :             }
     307                 : 
     308               1 :             CPPUNIT_ASSERT(nownum == 0);
     309                 :         }
     310                 : 
     311                 :         { // test const_reverse_iterator prefix--
     312               1 :             unsigned int nownum = 0;
     313                 : 
     314               1 :             btree_type::const_reverse_iterator i;
     315            2000 :             for(i = --map.rend(); i != map.rbegin(); --i)
     316                 :             {
     317             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     318            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     319                 : 
     320             999 :                 nownum++;
     321                 :             }
     322                 : 
     323               1 :             CPPUNIT_ASSERT( nownum == i->first );
     324               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     325                 : 
     326               1 :             nownum++;
     327                 : 
     328               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     329                 :         }
     330                 : 
     331                 :         // postfix
     332                 : 
     333                 :         { // test iterator postfix++
     334               1 :             unsigned int nownum = 0;
     335                 : 
     336            2003 :             for(btree_type::iterator i = map.begin();
     337                 :                 i != map.end(); i++)
     338                 :             {
     339            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     340            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     341                 : 
     342            1000 :                 nownum++;
     343                 :             }
     344                 : 
     345               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     346                 :         }
     347                 : 
     348                 :         { // test iterator postfix--
     349               1 :             unsigned int nownum = maxnum;
     350                 : 
     351               1 :             btree_type::iterator i;
     352            2000 :             for(i = --map.end(); i != map.begin(); i--)
     353                 :             {
     354             999 :                 nownum--;
     355                 : 
     356             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     357            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     358                 :             }
     359                 : 
     360               1 :             nownum--;
     361                 : 
     362               1 :             CPPUNIT_ASSERT( nownum == i->first );
     363               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     364                 : 
     365               2 :             CPPUNIT_ASSERT(nownum == 0);
     366                 :         }
     367                 : 
     368                 :         { // test const_iterator postfix++
     369               1 :             unsigned int nownum = 0;
     370                 : 
     371            2003 :             for(btree_type::const_iterator i = map.begin();
     372                 :                 i != map.end(); i++)
     373                 :             {
     374            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     375            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     376                 : 
     377            1000 :                 nownum++;
     378                 :             }
     379                 : 
     380               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     381                 :         }
     382                 : 
     383                 :         { // test const_iterator postfix--
     384               1 :             unsigned int nownum = maxnum;
     385                 : 
     386               1 :             btree_type::const_iterator i;
     387            2000 :             for(i = --map.end(); i != map.begin(); i--)
     388                 :             {
     389             999 :                 nownum--;
     390                 : 
     391             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     392            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     393                 :             }
     394                 : 
     395               1 :             nownum--;
     396                 : 
     397               1 :             CPPUNIT_ASSERT( nownum == i->first );
     398               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     399                 : 
     400               2 :             CPPUNIT_ASSERT(nownum == 0);
     401                 :         }
     402                 : 
     403                 :         { // test reverse_iterator postfix++
     404               1 :             unsigned int nownum = maxnum;
     405                 : 
     406            2003 :             for(btree_type::reverse_iterator i = map.rbegin();
     407                 :                 i != map.rend(); i++)
     408                 :             {
     409            1000 :                 nownum--;
     410                 : 
     411            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     412            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     413                 :             }
     414                 : 
     415               1 :             CPPUNIT_ASSERT(nownum == 0);
     416                 :         }
     417                 : 
     418                 :         { // test reverse_iterator postfix--
     419               1 :             unsigned int nownum = 0;
     420                 : 
     421               1 :             btree_type::reverse_iterator i;
     422            2000 :             for(i = --map.rend(); i != map.rbegin(); i--)
     423                 :             {
     424             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     425            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     426                 : 
     427             999 :                 nownum++;
     428                 :             }
     429                 : 
     430               1 :             CPPUNIT_ASSERT( nownum == i->first );
     431               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     432                 : 
     433               1 :             nownum++;
     434                 : 
     435               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     436                 :         }
     437                 : 
     438                 :         { // test const_reverse_iterator postfix++
     439               1 :             unsigned int nownum = maxnum;
     440                 : 
     441            2003 :             for(btree_type::const_reverse_iterator i = map.rbegin();
     442                 :                 i != map.rend(); i++)
     443                 :             {
     444            1000 :                 nownum--;
     445                 : 
     446            1000 :                 CPPUNIT_ASSERT( nownum == i->first );
     447            2000 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     448                 :             }
     449                 : 
     450               1 :             CPPUNIT_ASSERT(nownum == 0);
     451                 :         }
     452                 : 
     453                 :         { // test const_reverse_iterator postfix--
     454               1 :             unsigned int nownum = 0;
     455                 : 
     456               1 :             btree_type::const_reverse_iterator i;
     457            2000 :             for(i = --map.rend(); i != map.rbegin(); i--)
     458                 :             {
     459             999 :                 CPPUNIT_ASSERT( nownum == i->first );
     460            1998 :                 CPPUNIT_ASSERT( nownum * 3 == i->second );
     461                 : 
     462             999 :                 nownum++;
     463                 :             }
     464                 : 
     465               1 :             CPPUNIT_ASSERT( nownum == i->first );
     466               2 :             CPPUNIT_ASSERT( nownum * 3 == i->second );
     467                 : 
     468               1 :             nownum++;
     469                 : 
     470               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     471               1 :         }
     472               1 :     }
     473                 : 
     474               1 :     void test_iterator4()
     475                 :     {
     476                 :         typedef stx::btree_set<unsigned int,
     477                 :             std::less<unsigned int>, struct traits_nodebug> btree_type;
     478                 : 
     479               1 :         btree_type set;
     480                 : 
     481               1 :         unsigned int maxnum = 1000;
     482                 : 
     483            1001 :         for(unsigned int i = 0; i < maxnum; ++i)
     484                 :         {
     485            1000 :             set.insert(i);
     486                 :         }
     487                 : 
     488                 :         { // test iterator prefix++
     489               1 :             unsigned int nownum = 0;
     490                 : 
     491            2002 :             for(btree_type::iterator i = set.begin();
     492                 :                 i != set.end(); ++i)
     493                 :             {
     494            1000 :                 CPPUNIT_ASSERT( nownum == *i );
     495            1000 :                 nownum++;
     496                 :             }
     497                 : 
     498               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     499                 :         }
     500                 : 
     501                 :         { // test iterator prefix--
     502               1 :             unsigned int nownum = maxnum;
     503                 : 
     504               1 :             btree_type::iterator i;
     505            2001 :             for(i = --set.end(); i != set.begin(); --i)
     506                 :             {
     507             999 :                 CPPUNIT_ASSERT( --nownum == *i );
     508                 :             }
     509                 : 
     510               1 :             CPPUNIT_ASSERT( --nownum == *i );
     511                 : 
     512               2 :             CPPUNIT_ASSERT(nownum == 0);
     513                 :         }
     514                 : 
     515                 :         { // test const_iterator prefix++
     516               1 :             unsigned int nownum = 0;
     517                 : 
     518            2003 :             for(btree_type::const_iterator i = set.begin();
     519                 :                 i != set.end(); ++i)
     520                 :             {
     521            1000 :                 CPPUNIT_ASSERT( nownum++ == *i );
     522                 :             }
     523                 : 
     524               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     525                 :         }
     526                 : 
     527                 :         { // test const_iterator prefix--
     528               1 :             unsigned int nownum = maxnum;
     529                 : 
     530               1 :             btree_type::const_iterator i;
     531            2001 :             for(i = --set.end(); i != set.begin(); --i)
     532                 :             {
     533             999 :                 CPPUNIT_ASSERT( --nownum == *i );
     534                 :             }
     535                 : 
     536               1 :             CPPUNIT_ASSERT( --nownum == *i );
     537                 : 
     538               2 :             CPPUNIT_ASSERT(nownum == 0);
     539                 :         }
     540                 : 
     541                 :         { // test reverse_iterator prefix++
     542               1 :             unsigned int nownum = maxnum;
     543                 : 
     544            2003 :             for(btree_type::reverse_iterator i = set.rbegin();
     545                 :                 i != set.rend(); ++i)
     546                 :             {
     547            1000 :                 CPPUNIT_ASSERT( --nownum == *i );
     548                 :             }
     549                 : 
     550               1 :             CPPUNIT_ASSERT(nownum == 0);
     551                 :         }
     552                 : 
     553                 :         { // test reverse_iterator prefix--
     554               1 :             unsigned int nownum = 0;
     555                 : 
     556               1 :             btree_type::reverse_iterator i;
     557            2001 :             for(i = --set.rend(); i != set.rbegin(); --i)
     558                 :             {
     559             999 :                 CPPUNIT_ASSERT( nownum++ == *i );
     560                 :             }
     561                 : 
     562               1 :             CPPUNIT_ASSERT( nownum++ == *i );
     563                 : 
     564               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     565                 :         }
     566                 : 
     567                 :         { // test const_reverse_iterator prefix++
     568               1 :             unsigned int nownum = maxnum;
     569                 : 
     570            2003 :             for(btree_type::const_reverse_iterator i = set.rbegin();
     571                 :                 i != set.rend(); ++i)
     572                 :             {
     573            1000 :                 CPPUNIT_ASSERT( --nownum == *i );
     574                 :             }
     575                 : 
     576               1 :             CPPUNIT_ASSERT(nownum == 0);
     577                 :         }
     578                 : 
     579                 :         { // test const_reverse_iterator prefix--
     580               1 :             unsigned int nownum = 0;
     581                 : 
     582               1 :             btree_type::const_reverse_iterator i;
     583            2001 :             for(i = --set.rend(); i != set.rbegin(); --i)
     584                 :             {
     585             999 :                 CPPUNIT_ASSERT( nownum++ == *i );
     586                 :             }
     587                 : 
     588               1 :             CPPUNIT_ASSERT( nownum++ == *i );
     589                 : 
     590               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     591                 :         }
     592                 : 
     593                 :         // postfix
     594                 : 
     595                 :         { // test iterator postfix++
     596               1 :             unsigned int nownum = 0;
     597                 : 
     598            2003 :             for(btree_type::iterator i = set.begin();
     599                 :                 i != set.end(); i++)
     600                 :             {
     601            1000 :                 CPPUNIT_ASSERT( nownum++ == *i );
     602                 :             }
     603                 : 
     604               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     605                 :         }
     606                 : 
     607                 :         { // test iterator postfix--
     608               1 :             unsigned int nownum = maxnum;
     609                 : 
     610               1 :             btree_type::iterator i;
     611            2001 :             for(i = --set.end(); i != set.begin(); i--)
     612                 :             {
     613                 : 
     614             999 :                 CPPUNIT_ASSERT( --nownum == *i );
     615                 :             }
     616                 : 
     617               1 :             CPPUNIT_ASSERT( --nownum == *i );
     618                 : 
     619               2 :             CPPUNIT_ASSERT(nownum == 0);
     620                 :         }
     621                 : 
     622                 :         { // test const_iterator postfix++
     623               1 :             unsigned int nownum = 0;
     624                 : 
     625            2003 :             for(btree_type::const_iterator i = set.begin();
     626                 :                 i != set.end(); i++)
     627                 :             {
     628            1000 :                 CPPUNIT_ASSERT( nownum++ == *i );
     629                 :             }
     630                 : 
     631               1 :             CPPUNIT_ASSERT(nownum == maxnum);
     632                 :         }
     633                 : 
     634                 :         { // test const_iterator postfix--
     635               1 :             unsigned int nownum = maxnum;
     636                 : 
     637               1 :             btree_type::const_iterator i;
     638            2001 :             for(i = --set.end(); i != set.begin(); i--)
     639                 :             {
     640             999 :                 CPPUNIT_ASSERT( --nownum == *i );
     641                 :             }
     642                 : 
     643               1 :             CPPUNIT_ASSERT( --nownum == *i );
     644                 : 
     645               2 :             CPPUNIT_ASSERT(nownum == 0);
     646                 :         }
     647                 : 
     648                 :         { // test reverse_iterator postfix++
     649               1 :             unsigned int nownum = maxnum;
     650                 : 
     651            2003 :             for(btree_type::reverse_iterator i = set.rbegin();
     652                 :                 i != set.rend(); i++)
     653                 :             {
     654            1000 :                 CPPUNIT_ASSERT( --nownum == *i );
     655                 :             }
     656                 : 
     657               1 :             CPPUNIT_ASSERT(nownum == 0);
     658                 :         }
     659                 : 
     660                 :         { // test reverse_iterator postfix--
     661               1 :             unsigned int nownum = 0;
     662                 : 
     663               1 :             btree_type::reverse_iterator i;
     664            2001 :             for(i = --set.rend(); i != set.rbegin(); i--)
     665                 :             {
     666             999 :                 CPPUNIT_ASSERT( nownum++ == *i );
     667                 :             }
     668                 : 
     669               1 :             CPPUNIT_ASSERT( nownum++ == *i );
     670                 : 
     671               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     672                 :         }
     673                 : 
     674                 :         { // test const_reverse_iterator postfix++
     675               1 :             unsigned int nownum = maxnum;
     676                 : 
     677            2003 :             for(btree_type::const_reverse_iterator i = set.rbegin();
     678                 :                 i != set.rend(); i++)
     679                 :             {
     680            1000 :                 CPPUNIT_ASSERT( --nownum == *i );
     681                 :             }
     682                 : 
     683               1 :             CPPUNIT_ASSERT(nownum == 0);
     684                 :         }
     685                 : 
     686                 :         { // test const_reverse_iterator postfix--
     687               1 :             unsigned int nownum = 0;
     688                 : 
     689               1 :             btree_type::const_reverse_iterator i;
     690            2001 :             for(i = --set.rend(); i != set.rbegin(); i--)
     691                 :             {
     692             999 :                 CPPUNIT_ASSERT( nownum++ == *i );
     693                 :             }
     694                 : 
     695               1 :             CPPUNIT_ASSERT( nownum++ == *i );
     696                 : 
     697               2 :             CPPUNIT_ASSERT(nownum == maxnum);
     698               1 :         }
     699               1 :     }
     700                 : 
     701               1 :     void test_iterator5()
     702                 :     {
     703                 :         typedef stx::btree_set<unsigned int,
     704                 :             std::less<unsigned int>, struct traits_nodebug> btree_type;
     705                 : 
     706               1 :         btree_type set;
     707                 : 
     708               1 :         unsigned int maxnum = 100;
     709                 : 
     710             101 :         for(unsigned int i = 0; i < maxnum; ++i)
     711                 :         {
     712             100 :             set.insert(i);
     713                 :         }
     714                 : 
     715                 :         {
     716               1 :             btree_type::iterator it;
     717                 : 
     718               1 :             it = set.begin();
     719               1 :             it--;
     720               1 :             CPPUNIT_ASSERT( it == set.begin() );
     721                 : 
     722               1 :             it = set.begin();
     723               1 :             --it;
     724               1 :             CPPUNIT_ASSERT( it == set.begin() );
     725                 : 
     726               1 :             it = set.end();
     727               1 :             it++;
     728               1 :             CPPUNIT_ASSERT( it == set.end() );
     729                 : 
     730               1 :             it = set.end();
     731               1 :             ++it;
     732               1 :             CPPUNIT_ASSERT( it == set.end() );
     733                 :         }
     734                 : 
     735                 :         {
     736               1 :             btree_type::const_iterator it;
     737                 : 
     738               2 :             it = set.begin();
     739               1 :             it--;
     740               1 :             CPPUNIT_ASSERT( it == set.begin() );
     741                 : 
     742               2 :             it = set.begin();
     743               1 :             --it;
     744               1 :             CPPUNIT_ASSERT( it == set.begin() );
     745                 : 
     746               2 :             it = set.end();
     747               1 :             it++;
     748               1 :             CPPUNIT_ASSERT( it == set.end() );
     749                 : 
     750               2 :             it = set.end();
     751               1 :             ++it;
     752               1 :             CPPUNIT_ASSERT( it == set.end() );
     753                 :         }
     754                 : 
     755                 :         {
     756               1 :             btree_type::reverse_iterator it;
     757                 : 
     758               1 :             it = set.rbegin();
     759               1 :             it--;
     760               1 :             CPPUNIT_ASSERT( it == set.rbegin() );
     761                 : 
     762               1 :             it = set.rbegin();
     763               1 :             --it;
     764               1 :             CPPUNIT_ASSERT( it == set.rbegin() );
     765                 : 
     766               1 :             it = set.rend();
     767               1 :             it++;
     768               1 :             CPPUNIT_ASSERT( it == set.rend() );
     769                 : 
     770               1 :             it = set.rend();
     771               1 :             ++it;
     772               1 :             CPPUNIT_ASSERT( it == set.rend() );
     773                 :         }
     774                 : 
     775                 :         {
     776               1 :             btree_type::const_reverse_iterator it;
     777                 : 
     778               2 :             it = set.rbegin();
     779               1 :             it--;
     780               1 :             CPPUNIT_ASSERT( it == set.rbegin() );
     781                 : 
     782               2 :             it = set.rbegin();
     783               1 :             --it;
     784               1 :             CPPUNIT_ASSERT( it == set.rbegin() );
     785                 : 
     786               2 :             it = set.rend();
     787               1 :             it++;
     788               1 :             CPPUNIT_ASSERT( it == set.rend() );
     789                 : 
     790               2 :             it = set.rend();
     791               1 :             ++it;
     792               1 :             CPPUNIT_ASSERT( it == set.rend() );
     793               1 :         }
     794               1 :     }
     795                 : };
     796               0 : 
     797               3 : CPPUNIT_TEST_SUITE_REGISTRATION( IteratorTest );

Generated by: LTP GCOV extension version 1.6