join_iterator_test.cxx 1.0 KB

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