#include "iterator/end_aware_iterator.hpp" #include #include using end_aware_iterator = ::iterator::end_aware_iterator::iterator>; TEST(EndAwareIteratorTest, BeginWrapperIsEqualToBegin) { std::vector v{1, 2, 3, 4, 5}; EXPECT_THAT(*v.begin(), *end_aware_iterator(v.begin(), v.end())); } TEST(EndAwareIteratorTest, MutableActionsArePassthrough) { std::vector v{1, 2, 3, 4, 5}; *end_aware_iterator(v.begin(), v.end()) = -1; EXPECT_THAT(v[0], -1); } TEST(EndAwareIteratorTest, CanTellYouThatItsReachedEnd) { std::vector v{1, 2, 3, 4, 5}; end_aware_iterator it{v.end()-1, v.end()}; EXPECT_FALSE(it.done()); ++it; EXPECT_THAT(it, end_aware_iterator(v.end(),v.end())); EXPECT_TRUE(it.done()); } TEST(EndAwareIteratorTest, IncrementOnEndIsNoOp) { std::vector v{1, 2, 3, 4, 5}; end_aware_iterator it{v.end(), v.end()}; end_aware_iterator const cp = it; ++it; EXPECT_THAT(it, cp); EXPECT_TRUE(it.done()); }