summaryrefslogtreecommitdiffstats
path: root/src/usr/testcore/lib
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-02-14 16:45:40 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-02-22 16:11:14 -0600
commitddb7ed4a1c3da475aa1fd6036171d4bbba75e722 (patch)
tree6616d24f32e7ff5154bb25bd9366137848ceeced /src/usr/testcore/lib
parentc232f7a5a8b38321edae7a02c3148e67b5b4c3c7 (diff)
downloadtalos-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')
-rw-r--r--src/usr/testcore/lib/stltest.H94
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
OpenPOWER on IntegriCloud