|
|
@@ -12,12 +12,62 @@ TEST(JoinIteratorTest, FirstDereferencedElemIsTheFirstInTheChain) {
|
|
|
EXPECT_THAT(*join_iterator(make_end_aware_iterator(mv)), mv[0][0]);
|
|
|
}
|
|
|
|
|
|
+TEST(JoinIteratorTest, HoldsReferenceToContainedElements) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ EXPECT_THAT(join_iterator(make_end_aware_iterator(mv)).operator->(),
|
|
|
+ &mv[0][0]);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(JoinIteratorTest, DefaultCtorIsEnd) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ EXPECT_THAT(join_iterator(make_end_aware_iterator(mv)),
|
|
|
+ testing::Ne(join_iterator()));
|
|
|
+ mv.clear();
|
|
|
+ EXPECT_THAT(join_iterator(make_end_aware_iterator(mv)), join_iterator());
|
|
|
+}
|
|
|
+
|
|
|
+// TODO: This ought to be implemented as a compiles-test
|
|
|
+TEST(JoinIteratorTest, CanCastCompatibleIterators) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ join_iterator it(make_end_aware_iterator(mv));
|
|
|
+ iterator::joining_iterator<decltype(mv)::const_iterator>{it};
|
|
|
+}
|
|
|
+
|
|
|
+TEST(JoinIteratorTest, CanAccessInternalIterator) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ auto eai = make_end_aware_iterator(mv);
|
|
|
+ join_iterator it(eai);
|
|
|
+ EXPECT_THAT(it.join_iterator(), eai);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(JoinIteratorTest, CanAccessChildIterator) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ join_iterator it(make_end_aware_iterator(mv));
|
|
|
+ EXPECT_THAT(it.element_iterator(), make_end_aware_iterator(mv[0]));
|
|
|
+}
|
|
|
+
|
|
|
TEST(JoinIteratorTest, EmptyConstructorEqualsEnd) {
|
|
|
std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
join_iterator it({mv.end(), mv.end()}, {mv.back().end(), mv.back().end()});
|
|
|
EXPECT_THAT(it, join_iterator());
|
|
|
}
|
|
|
|
|
|
+TEST(JoinIteratorTest, PreIncrementAdvancesIterator) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ join_iterator it(make_end_aware_iterator(mv));
|
|
|
+ EXPECT_THAT(*it, 1);
|
|
|
+ EXPECT_THAT(*++it, 2);
|
|
|
+ EXPECT_THAT(*it, 2);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(JoinIteratorTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
+ std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
+ join_iterator it(make_end_aware_iterator(mv));
|
|
|
+ EXPECT_THAT(*it, 1);
|
|
|
+ EXPECT_THAT(*it++, 1);
|
|
|
+ EXPECT_THAT(*it, 2);
|
|
|
+}
|
|
|
+
|
|
|
TEST(JoinIteratorTest, MovesFromListToListWhenReachingEnd) {
|
|
|
std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
|
|
|
join_iterator it(make_end_aware_iterator(mv), {mv[0].end(), mv[0].end()});
|