|
|
@@ -7,40 +7,47 @@
|
|
|
|
|
|
#include "iterator/end_aware_iterator.hpp"
|
|
|
|
|
|
-using idx_iterator = iterator::indexed_iterator<std::vector<int>::iterator>;
|
|
|
+using iterator::end_aware_iterator;
|
|
|
+using iterator::indexed_iterator;
|
|
|
+
|
|
|
+using testing::Ne;
|
|
|
|
|
|
// TODO: This ought to be implemented as a compiles-test
|
|
|
TEST(IndexedIteratorTest, CanCastCompatibleIterators) {
|
|
|
std::vector<int> v{1, 2, 3, 4, 5};
|
|
|
- idx_iterator eai(v.begin());
|
|
|
+ indexed_iterator eai(v.begin());
|
|
|
::iterator::indexed_iterator<std::vector<int>::const_iterator>{eai};
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, CanLieAboutIndex) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator it(vec.begin(), 3);
|
|
|
+ indexed_iterator it(vec.begin(), 3);
|
|
|
EXPECT_THAT(it->first, 3);
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, FakeIndexDoesntEffectEqualityCheck) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- EXPECT_THAT(idx_iterator(vec.begin()), idx_iterator(vec.begin(), 3));
|
|
|
- EXPECT_THAT(idx_iterator(vec.begin()) + 3,
|
|
|
- testing::Ne(idx_iterator(vec.begin(), 3)));
|
|
|
+ EXPECT_THAT(indexed_iterator(vec.begin()), indexed_iterator(vec.begin(), 3));
|
|
|
+ EXPECT_THAT(indexed_iterator(vec.begin()) + 3,
|
|
|
+ testing::Ne(indexed_iterator(vec.begin(), 3)));
|
|
|
+}
|
|
|
+
|
|
|
+TEST(IndexedIteratorTest, DoesNotTrackByIndex) {
|
|
|
+ std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
+ indexed_iterator end(vec.end());
|
|
|
+ EXPECT_THAT(decltype(end){}, Ne(end));
|
|
|
}
|
|
|
|
|
|
-TEST(IndexedIteratorTest, IffBaseIteratorEmptyIsEndThenEmptyIsEnd) {
|
|
|
+TEST(IndexedIteratorTest, IteratorPropagatesAtEnd) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- EXPECT_THAT(idx_iterator(), testing::Ne(idx_iterator(vec.end())));
|
|
|
- iterator::end_aware_iterator<decltype(vec.end())> end(vec.end());
|
|
|
- EXPECT_THAT(iterator::indexed_iterator<decltype(end)>(),
|
|
|
- iterator::indexed_iterator<decltype(end)>(end));
|
|
|
+ indexed_iterator end(end_aware_iterator(vec.end()));
|
|
|
+ EXPECT_THAT(decltype(end){}, end);
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, CanCompareIteratorOrder) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator const begin(vec.begin());
|
|
|
- idx_iterator const it = begin + 3;
|
|
|
+ indexed_iterator const begin(vec.begin());
|
|
|
+ indexed_iterator const it = begin + 3;
|
|
|
EXPECT_THAT(begin, testing::Lt(it));
|
|
|
EXPECT_THAT(begin, testing::Le(it));
|
|
|
EXPECT_THAT(it, testing::Le(it));
|
|
|
@@ -51,7 +58,7 @@ TEST(IndexedIteratorTest, CanCompareIteratorOrder) {
|
|
|
|
|
|
TEST(IndexedIteratorTest, PreIncrementAdvancesIterator) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator it(vec.begin() + 1);
|
|
|
+ indexed_iterator it(vec.begin() + 1);
|
|
|
EXPECT_THAT(it->second, 3);
|
|
|
EXPECT_THAT((++it)->second, 2);
|
|
|
EXPECT_THAT(it->second, 2);
|
|
|
@@ -59,7 +66,7 @@ TEST(IndexedIteratorTest, PreIncrementAdvancesIterator) {
|
|
|
|
|
|
TEST(IndexedIteratorTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator it(vec.begin() + 1);
|
|
|
+ indexed_iterator it(vec.begin() + 1);
|
|
|
EXPECT_THAT(it->second, 3);
|
|
|
EXPECT_THAT((it++)->second, 3);
|
|
|
EXPECT_THAT(it->second, 2);
|
|
|
@@ -67,7 +74,7 @@ TEST(IndexedIteratorTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
|
|
|
TEST(IndexedIteratorTest, PreDecrementAdvancesIterator) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator it(vec.begin() + 1);
|
|
|
+ indexed_iterator it(vec.begin() + 1);
|
|
|
EXPECT_THAT(it->second, 3);
|
|
|
EXPECT_THAT((--it)->second, 5);
|
|
|
EXPECT_THAT(it->second, 5);
|
|
|
@@ -75,7 +82,7 @@ TEST(IndexedIteratorTest, PreDecrementAdvancesIterator) {
|
|
|
|
|
|
TEST(IndexedIteratorTest, PostDecrementReturnsCopyOfPrev) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator it(vec.begin() + 1);
|
|
|
+ indexed_iterator it(vec.begin() + 1);
|
|
|
EXPECT_THAT(it->second, 3);
|
|
|
EXPECT_THAT((it--)->second, 3);
|
|
|
EXPECT_THAT(it->second, 5);
|
|
|
@@ -83,24 +90,25 @@ TEST(IndexedIteratorTest, PostDecrementReturnsCopyOfPrev) {
|
|
|
|
|
|
TEST(IndexedIteratorTest, CanWalkNStepsForward) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator const begin(vec.begin());
|
|
|
- idx_iterator it = begin;
|
|
|
+ indexed_iterator const begin(vec.begin());
|
|
|
+ indexed_iterator it = begin;
|
|
|
it += 4;
|
|
|
EXPECT_THAT(std::distance(begin, it), 4);
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, CanWalkNStepsBackwards) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator const end(vec.end());
|
|
|
- idx_iterator it = end;
|
|
|
+ indexed_iterator const end(vec.end());
|
|
|
+ indexed_iterator it = end;
|
|
|
it -= 4;
|
|
|
EXPECT_THAT(std::distance(it, end), 4);
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, RandomAccessIsPassthrough) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- EXPECT_THAT(idx_iterator(vec.begin()) + 4, idx_iterator(vec.begin() + 4));
|
|
|
- EXPECT_THAT(idx_iterator(vec.end()) - 4, idx_iterator(vec.end() - 4));
|
|
|
+ EXPECT_THAT(indexed_iterator(vec.begin()) + 4,
|
|
|
+ indexed_iterator(vec.begin() + 4));
|
|
|
+ EXPECT_THAT(indexed_iterator(vec.end()) - 4, indexed_iterator(vec.end() - 4));
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, TreatsVectorIteratorAsPairIdxValue) {
|
|
|
@@ -108,8 +116,8 @@ TEST(IndexedIteratorTest, TreatsVectorIteratorAsPairIdxValue) {
|
|
|
std::vector<std::pair<int, int>> const expected{
|
|
|
{0, 5}, {1, 3}, {2, 2}, {3, 8}, {4, 9}, {5, 11}, {6, 2}, {7, 4}};
|
|
|
|
|
|
- std::vector<std::pair<int, int>> const result(idx_iterator(vec.begin()),
|
|
|
- idx_iterator(vec.end()));
|
|
|
+ std::vector<std::pair<int, int>> const result(indexed_iterator(vec.begin()),
|
|
|
+ indexed_iterator(vec.end()));
|
|
|
EXPECT_THAT(result, expected);
|
|
|
}
|
|
|
|
|
|
@@ -118,13 +126,13 @@ TEST(IndexedIteratorTest, TreatsVectorIteratorAsMapIdxToValue) {
|
|
|
std::map<int, int> const expected{{0, 5}, {1, 3}, {2, 2}, {3, 8},
|
|
|
{4, 9}, {5, 11}, {6, 2}, {7, 4}};
|
|
|
|
|
|
- std::map<int, int> const result(idx_iterator(vec.begin()),
|
|
|
- idx_iterator(vec.end()));
|
|
|
+ std::map<int, int> const result(indexed_iterator(vec.begin()),
|
|
|
+ indexed_iterator(vec.end()));
|
|
|
EXPECT_THAT(result, expected);
|
|
|
}
|
|
|
|
|
|
TEST(IndexedIteratorTest, CanMutatePointedToData) {
|
|
|
std::vector<int> vec{5, 3, 2, 8, 9, 11, 2, 4};
|
|
|
- idx_iterator(vec.begin() + 4, 4)->second = -1;
|
|
|
+ indexed_iterator(vec.begin() + 4, 4)->second = -1;
|
|
|
EXPECT_THAT(vec[4], -1);
|
|
|
}
|