unkeyed_iterator_test.cxx 2.1 KB

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