diff options
author | Patrick Williams <iawillia@us.ibm.com> | 2012-02-14 16:45:40 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2012-02-22 16:11:14 -0600 |
commit | ddb7ed4a1c3da475aa1fd6036171d4bbba75e722 (patch) | |
tree | 6616d24f32e7ff5154bb25bd9366137848ceeced /src/usr/testcore/lib/stltest.H | |
parent | c232f7a5a8b38321edae7a02c3148e67b5b4c3c7 (diff) | |
download | talos-hostboot-ddb7ed4a1c3da475aa1fd6036171d4bbba75e722.tar.gz talos-hostboot-ddb7ed4a1c3da475aa1fd6036171d4bbba75e722.zip |
STL advance / distance.
Change-Id: I9cdf9459f2970def812b1681897fe7d0cdda37ac
Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/669
Tested-by: Jenkins Server
Reviewed-by: Douglas R. Gilbert <dgilbert@us.ibm.com>
Reviewed-by: Terry J. Opie <opiet@us.ibm.com>
Reviewed-by: MIKE J. JONES <mjjones@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/testcore/lib/stltest.H')
-rw-r--r-- | src/usr/testcore/lib/stltest.H | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/usr/testcore/lib/stltest.H b/src/usr/testcore/lib/stltest.H index 8eca620cd..f2bea98c5 100644 --- a/src/usr/testcore/lib/stltest.H +++ b/src/usr/testcore/lib/stltest.H @@ -27,6 +27,8 @@ #include <vector> #include <list> #include <map> +#include <algorithm> +#include <iterator> class STLTest : public CxxTest::TestSuite { @@ -167,5 +169,97 @@ class STLTest : public CxxTest::TestSuite --i; } } + + + void testAdvance() + { + // Test for a non-random-access iterator, such as list. + std::list<int> list; + + for(int i = 0; i < 100; i++) + list.push_back(i); + + for (int i = 0; i < 100; i++) + { + std::list<int>::iterator itr = list.begin(); + std::advance(itr, i); + if (*itr != i) + { + TS_FAIL("List iterator value mismatch %d:%d.", *itr, i); + } + } + + // Test for a random-access iterator, such as vector. + std::vector<int> vector; + + for (int i = 0; i < 100; i++) + vector.push_back(i); + + for (int i = 0; i < 100; i++) + { + std::vector<int>::iterator itr = vector.begin(); + std::advance(itr, i); + if (*itr != i) + { + TS_FAIL("Vector iterator value mismatch %d:%d.", *itr, i); + } + } + } + + void testDistance() + { + // Test for a non-random-access iterator, such as list. + std::list<int> list; + + for (int i = 0; i < 100; i++) + list.push_back(i); + + for (int i = 0; i < 100; i++) + for (int j = 0; j < 100; j++) + { + // distance isn't defined for non-random-access iterator + // when "first" is greater than "last". + if (i > j) continue; + + std::list<int>::iterator itr_i = list.begin(), + itr_j = list.begin(); + + std::advance(itr_i, i); + std::advance(itr_j, j); + + ssize_t d = std::distance(itr_i, itr_j); + + if (d != (j-i)) + { + TS_FAIL("List distance incorrect %d:%d:%d", + i, j, d); + } + } + + // Test for a random-access iterator, such as vector. + std::vector<int> vector; + + for (int i = 0; i < 100; i++) + vector.push_back(i); + + for (int i = 0; i < 100; i++) + for (int j = 0; j < 100; j++) + { + std::vector<int>::iterator itr_i = vector.begin(), + itr_j = vector.begin(); + + std::advance(itr_i, i); + std::advance(itr_j, j); + + ssize_t d = std::distance(itr_i, itr_j); + + if (d != (j-i)) + { + TS_FAIL("Vector distance incorrect %d:%d:%d", + i, j, d); + } + } + + } }; #endif |