end_aware_iterator_test.cxx 1000 B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "iterator/end_aware_iterator.hpp"
  2. #include <vector>
  3. #include <gmock/gmock.h>
  4. using end_aware_iterator = ::iterator::end_aware_iterator<std::vector<int>::iterator>;
  5. TEST(EndAwareIteratorTest, BeginWrapperIsEqualToBegin) {
  6. std::vector<int> v{1, 2, 3, 4, 5};
  7. EXPECT_THAT(*v.begin(), *end_aware_iterator(v.begin(), v.end()));
  8. }
  9. TEST(EndAwareIteratorTest, MutableActionsArePassthrough) {
  10. std::vector<int> v{1, 2, 3, 4, 5};
  11. *end_aware_iterator(v.begin(), v.end()) = -1;
  12. EXPECT_THAT(v[0], -1);
  13. }
  14. TEST(EndAwareIteratorTest, CanTellYouThatItsReachedEnd) {
  15. std::vector<int> v{1, 2, 3, 4, 5};
  16. end_aware_iterator it{v.end()-1, v.end()};
  17. EXPECT_FALSE(it.done());
  18. ++it;
  19. EXPECT_THAT(it, end_aware_iterator(v.end(),v.end()));
  20. EXPECT_TRUE(it.done());
  21. }
  22. TEST(EndAwareIteratorTest, IncrementOnEndIsNoOp) {
  23. std::vector<int> v{1, 2, 3, 4, 5};
  24. end_aware_iterator it{v.end(), v.end()};
  25. end_aware_iterator const cp = it;
  26. ++it;
  27. EXPECT_THAT(it, cp);
  28. EXPECT_TRUE(it.done());
  29. }