end_aware_iterator_test.cxx 1007 B

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