join_iterator_test.cxx 1.1 KB

123456789101112131415161718192021222324252627282930313233
  1. #include "iterator/join_iterator.hpp"
  2. #include <vector>
  3. #include <gmock/gmock.h>
  4. using join_iterator =
  5. iterator::joining_iterator<std::vector<std::vector<int>>::iterator>;
  6. TEST(JoinIteratorTest, FirstDereferencedElemIsTheFirstInTheChain) {
  7. std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
  8. EXPECT_THAT(*join_iterator(make_end_aware_iterator(mv)), mv[0][0]);
  9. }
  10. TEST(JoinIteratorTest, EmptyConstructorEqualsEnd) {
  11. std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
  12. join_iterator it({mv.end(), mv.end()}, {mv.back().end(), mv.back().end()});
  13. EXPECT_THAT(it, join_iterator());
  14. }
  15. TEST(JoinIteratorTest, MovesFromListToListWhenReachingEnd) {
  16. std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
  17. join_iterator it(make_end_aware_iterator(mv), {mv[0].end(), mv[0].end()});
  18. EXPECT_THAT(*++it, mv[1][0]);
  19. }
  20. TEST(JoinIteratorTest, IncrementEndIsNoOp) {
  21. std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
  22. join_iterator it({mv.end(), mv.end()}, {mv.back().end(), mv.back().end()});
  23. join_iterator const cp = it;
  24. ++it;
  25. EXPECT_THAT(it, cp);
  26. }