unkeyed_iterator_test.cxx 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #include "iterator/unkeyed_iterator.hpp"
  2. #include <map>
  3. #include <vector>
  4. #include <gmock/gmock.h>
  5. #include "iterator/end_aware_iterator.hpp"
  6. using value_iterator = iterator::unkeyed_iterator<std::map<int, int>::iterator>;
  7. TEST(UnkeyedIteratorTest, IteratorOnlyReturnsValues) {
  8. std::map<int, int> map{{1, 2}, {2, 3}};
  9. std::vector<int> const expected{2, 3};
  10. std::vector<int> const result{value_iterator{map.begin()},
  11. value_iterator{map.end()}};
  12. EXPECT_THAT(result, expected);
  13. }
  14. TEST(UnkeyedIteratorTest, CanModifyIteratedCollectionValues) {
  15. std::map<int, int> map{{1, 2}, {2, 3}};
  16. value_iterator uit{map.begin()};
  17. *uit = 4;
  18. EXPECT_THAT(map[1], 4);
  19. }
  20. TEST(UnkeyedIteratorTest, PreIncrementAdvancesIterator) {
  21. std::map<int, int> map{{1, 2}, {2, 3}};
  22. value_iterator it(map.begin());
  23. EXPECT_THAT(*it, 2);
  24. EXPECT_THAT(*++it, 3);
  25. EXPECT_THAT(*it, 3);
  26. }
  27. TEST(UnkeyedIteratorTest, PostIncrementReturnsCopyOfPrev) {
  28. std::map<int, int> map{{1, 2}, {2, 3}};
  29. value_iterator it(map.begin());
  30. EXPECT_THAT(*it, 2);
  31. EXPECT_THAT(*it++, 2);
  32. EXPECT_THAT(*it, 3);
  33. }
  34. TEST(UnkeyedIteratorTest, PreDecrementAdvancesIterator) {
  35. std::map<int, int> map{{1, 2}, {2, 3}};
  36. value_iterator it(++map.begin());
  37. EXPECT_THAT(*it, 3);
  38. EXPECT_THAT(*--it, 2);
  39. EXPECT_THAT(*it, 2);
  40. }
  41. TEST(UnkeyedIteratorTest, PostDecrementReturnsCopyOfPrev) {
  42. std::map<int, int> map{{1, 2}, {2, 3}};
  43. value_iterator it(++map.begin());
  44. EXPECT_THAT(*it, 3);
  45. EXPECT_THAT(*it--, 3);
  46. EXPECT_THAT(*it, 2);
  47. }
  48. TEST(UnkeyedIteratorTest, EqualityIsPassthrough) {
  49. std::map<int, int> map{{1, 2}, {2, 3}};
  50. EXPECT_THAT(++value_iterator(map.begin()), value_iterator(++map.begin()));
  51. EXPECT_THAT(value_iterator(map.begin()),
  52. testing::Ne(value_iterator(++map.begin())));
  53. }
  54. TEST(UnkeyedIteratorTest, IffBaseIteratorEmptyIsEndThenEmptyIsEnd) {
  55. std::map<int, int> map{{1, 2}, {2, 3}};
  56. EXPECT_THAT(value_iterator(), testing::Ne(value_iterator(map.end())));
  57. iterator::end_aware_iterator<decltype(map.end())> end(map.end());
  58. EXPECT_THAT(iterator::unkeyed_iterator<decltype(end)>(),
  59. iterator::unkeyed_iterator<decltype(end)>(end));
  60. }
  61. TEST(UnkeyedIteratorTest, CanPointToObject) {
  62. std::map<int, int> map{{1, 2}, {2, 3}};
  63. EXPECT_THAT(value_iterator(map.begin()).operator->(), &(map.begin()->second));
  64. }