values_iterator_test.cxx 2.1 KB

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