1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/ossrv/genericopenlibs/cppstdlib/stl/test/unit/iter_test.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,167 @@
1.4 +#include <vector>
1.5 +#include <list>
1.6 +#include <algorithm>
1.7 +#include <numeric>
1.8 +
1.9 +#include "iota.h"
1.10 +#include "cppunit/cppunit_proxy.h"
1.11 +
1.12 +#if !defined (STLPORT) || defined(_STLP_USE_NAMESPACES)
1.13 +using namespace std;
1.14 +#endif
1.15 +
1.16 +//
1.17 +// TestCase class
1.18 +//
1.19 +class IterTest : public CPPUNIT_NS::TestCase
1.20 +{
1.21 + CPPUNIT_TEST_SUITE(IterTest);
1.22 + CPPUNIT_TEST(iter1);
1.23 + CPPUNIT_TEST(iter3);
1.24 + CPPUNIT_TEST(iter4);
1.25 + CPPUNIT_TEST(iterswp0);
1.26 + CPPUNIT_TEST(iterswp1);
1.27 + CPPUNIT_TEST(iterswp2);
1.28 + CPPUNIT_TEST(iterswp3);
1.29 + CPPUNIT_TEST_SUITE_END();
1.30 +
1.31 +protected:
1.32 + void iter1();
1.33 + void iter3();
1.34 + void iter4();
1.35 + void iterswp0();
1.36 + void iterswp1();
1.37 + void iterswp2();
1.38 + void iterswp3();
1.39 +};
1.40 +
1.41 +CPPUNIT_TEST_SUITE_REGISTRATION(IterTest);
1.42 +
1.43 +//
1.44 +// tests implementation
1.45 +//
1.46 +void IterTest::iter1()
1.47 +{
1.48 + vector<const char*> v; // Vector of character strings.
1.49 + v.push_back("zippy"); // First element.
1.50 + v.push_back("motorboy"); // Second element.
1.51 + typedef vector<const char*> vec;
1.52 + unsigned counter = 0;
1.53 + for (vec::iterator i = v.begin(); i != v.end(); ++i, ++counter) {
1.54 + switch (counter) {
1.55 + case 0:
1.56 + CPPUNIT_ASSERT(!strcmp(*i, "zippy"));
1.57 + break;
1.58 + case 1:
1.59 + CPPUNIT_ASSERT(!strcmp(*i, "motorboy"));
1.60 + break;
1.61 + default:
1.62 + CPPUNIT_ASSERT(false);
1.63 + }
1.64 + }
1.65 +}
1.66 +void IterTest::iter3()
1.67 +{
1.68 + typedef vector<const char*> Vec;
1.69 + Vec v; // Vector of character strings.
1.70 + v.push_back("zippy"); // First element.
1.71 + v.push_back("motorboy"); // Second element.
1.72 + Vec::reverse_iterator it;
1.73 + unsigned counter = 0;
1.74 + for (it = v.rbegin(); it != v.rend(); ++it, ++counter) {
1.75 + switch (counter) {
1.76 + case 1:
1.77 + CPPUNIT_ASSERT(!strcmp(*it, "zippy"));
1.78 + break;
1.79 + case 0:
1.80 + CPPUNIT_ASSERT(!strcmp(*it, "motorboy"));
1.81 + break;
1.82 + default:
1.83 + CPPUNIT_ASSERT(false);
1.84 + }
1.85 + }
1.86 +
1.87 + CPPUNIT_ASSERT(true);
1.88 +}
1.89 +void IterTest::iter4()
1.90 +{
1.91 + vector<int> v; // Empty vector of integers.
1.92 + v.push_back(1);
1.93 + v.push_back(2);
1.94 + v.push_back(3);
1.95 + // Position immediately after last item.
1.96 + vector<int>::iterator i = v.end();
1.97 + // Move back one and then access.
1.98 + CPPUNIT_ASSERT((*--i)==3);
1.99 + i -= 2; // Jump back two items.
1.100 + CPPUNIT_ASSERT((*i)==1);
1.101 +}
1.102 +void IterTest::iterswp0()
1.103 +{
1.104 + int numbers[6] = { 0, 1, 2, 3, 4, 5 };
1.105 +
1.106 + iter_swap(numbers, numbers + 3);
1.107 +
1.108 + CPPUNIT_ASSERT(numbers[0]==3);
1.109 + CPPUNIT_ASSERT(numbers[1]==1);
1.110 + CPPUNIT_ASSERT(numbers[2]==2);
1.111 + CPPUNIT_ASSERT(numbers[3]==0);
1.112 + CPPUNIT_ASSERT(numbers[4]==4);
1.113 + CPPUNIT_ASSERT(numbers[5]==5);
1.114 +
1.115 +}
1.116 +void IterTest::iterswp1()
1.117 +{
1.118 + vector<int> v1(6);
1.119 + __iota(v1.begin(), v1.end(), 0);
1.120 + iter_swap( v1.begin(), v1.begin() + 3 );
1.121 +
1.122 + CPPUNIT_ASSERT(v1[0]==3);
1.123 + CPPUNIT_ASSERT(v1[1]==1);
1.124 + CPPUNIT_ASSERT(v1[2]==2);
1.125 + CPPUNIT_ASSERT(v1[3]==0);
1.126 + CPPUNIT_ASSERT(v1[4]==4);
1.127 + CPPUNIT_ASSERT(v1[5]==5);
1.128 +}
1.129 +void IterTest::iterswp2()
1.130 +{
1.131 + vector<bool> boolVector;
1.132 +
1.133 + boolVector.push_back( true );
1.134 + boolVector.push_back( false );
1.135 +
1.136 + vector<bool>::iterator i1 = boolVector.begin();
1.137 + vector<bool>::iterator i2 = boolVector.begin();
1.138 + ++i2;
1.139 +
1.140 + bool v0 = *i1;
1.141 + bool v1 = *i2;
1.142 +
1.143 + iter_swap( i1, i2 );
1.144 +
1.145 + CPPUNIT_ASSERT(( *i1 == v1 && *i2 == v0 ));
1.146 +}
1.147 +
1.148 +
1.149 +void IterTest::iterswp3()
1.150 +{
1.151 + vector<int> vvref(10, 10);
1.152 + vector<int> lvref(10, 20);
1.153 +
1.154 + vector<vector<int> > vvints(4, vvref);
1.155 + list<vector<int> > lvints(4, lvref);
1.156 +
1.157 + iter_swap(vvints.begin(), lvints.begin());
1.158 + CPPUNIT_CHECK( vvints.front() == lvref );
1.159 + CPPUNIT_CHECK( lvints.front() == vvref );
1.160 +
1.161 +#if defined (STLPORT) && defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)
1.162 + int *pvvint = &vvints.front().front();
1.163 + int *plvint = &lvints.front().front();
1.164 +
1.165 + iter_swap(vvints.begin(), lvints.begin());
1.166 + //Check that elements have been swaped:
1.167 + CPPUNIT_CHECK( pvvint == &lvints.front().front() );
1.168 + CPPUNIT_CHECK( plvint == &vvints.front().front() );
1.169 +#endif
1.170 +}