summaryrefslogtreecommitdiffstats
path: root/src/usr/testcore/lib
diff options
context:
space:
mode:
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