1#include <vector> 2#include <list> 3#include <algorithm> 4 5#include "cppunit/cppunit_proxy.h" 6 7#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES) 8using namespace std; 9#endif 10 11// 12// TestCase class 13// 14class ReviterTest : public CPPUNIT_NS::TestCase 15{ 16 CPPUNIT_TEST_SUITE(ReviterTest); 17 CPPUNIT_TEST(reviter1); 18 CPPUNIT_TEST(reviter2); 19 CPPUNIT_TEST(revbit1); 20 CPPUNIT_TEST_SUITE_END(); 21 22protected: 23 void reviter1(); 24 void reviter2(); 25 void revbit1(); 26}; 27 28CPPUNIT_TEST_SUITE_REGISTRATION(ReviterTest); 29 30// 31// tests implementation 32// 33void ReviterTest::reviter1() 34{ 35 int array [] = { 1, 5, 2, 3 }; 36 37 vector<int> v(array, array + 4); 38 typedef vector<int>::reverse_iterator reviter; 39 reviter r(v.rend()); 40 r--; 41 42 CPPUNIT_ASSERT(*r-- == 1); 43 CPPUNIT_ASSERT(*r-- == 5); 44 CPPUNIT_ASSERT(*r-- == 2); 45 CPPUNIT_ASSERT(*r == 3); 46 CPPUNIT_ASSERT(r==v.rbegin()); 47} 48void ReviterTest::reviter2() 49{ 50 int array [] = { 1, 5, 2, 3 }; 51 52 vector<int> v(array, array + 4); 53 vector<int>::reverse_iterator r; 54 r = v.rbegin(); 55 CPPUNIT_ASSERT(*r++ == 3); 56 CPPUNIT_ASSERT(*r++ == 2); 57 CPPUNIT_ASSERT(*r++ == 5); 58 CPPUNIT_ASSERT(*r++ == 1); 59 CPPUNIT_ASSERT(r==v.rend()); 60} 61void ReviterTest::revbit1() 62{ 63 int array [] = { 1, 5, 2, 3 }; 64 65 list<int> v(array, array + 4); 66 list<int>::reverse_iterator r(v.rbegin()); 67 CPPUNIT_ASSERT(*r++ == 3); 68 CPPUNIT_ASSERT(*r++ == 2); 69 CPPUNIT_ASSERT(*r++ == 5); 70 CPPUNIT_ASSERT(*r++ == 1); 71 CPPUNIT_ASSERT(r==v.rend()); 72} 73