#include "iterator/join_iterator.hpp" #include #include using join_iterator = iterator::joining_iterator>::iterator>; TEST(JoinIteratorTest, FirstDereferencedElemIsTheFirstInTheChain) { std::vector> mv{{1,2,3},{4,5,6}}; EXPECT_THAT(*join_iterator(make_end_aware_iterator(mv)), mv[0][0]); } TEST(JoinIteratorTest, EmptyConstructorEqualsEnd) { std::vector> 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, MovesFromListToListWhenReachingEnd) { std::vector> mv{{1,2,3},{4,5,6}}; join_iterator it(make_end_aware_iterator(mv), { mv[0].end(), mv[0].end() }); EXPECT_THAT(*++it, mv[1][0]); } TEST(JoinIteratorTest, IncrementEndIsNoOp) { std::vector> mv{{1,2,3},{4,5,6}}; join_iterator it( { mv.end(), mv.end() }, { mv.back().end(), mv.back().end() }); join_iterator const cp = it; ++it; EXPECT_THAT(it, cp); }