unkeyed_iterator_test.cxx 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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::end_aware_iterator;
  7. using iterator::unkeyed_iterator;
  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{unkeyed_iterator{map.begin()},
  13. unkeyed_iterator{map.end()}};
  14. EXPECT_THAT(result, expected);
  15. }
  16. TEST(UnkeyedIteratorTest, CanModifyIteratedCollectionValues) {
  17. std::map<int, int> map{{1, 2}, {2, 3}};
  18. unkeyed_iterator 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. unkeyed_iterator 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. unkeyed_iterator 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. unkeyed_iterator 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. unkeyed_iterator 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(++unkeyed_iterator(map.begin()), unkeyed_iterator(++map.begin()));
  53. EXPECT_THAT(unkeyed_iterator(map.begin()),
  54. Ne(unkeyed_iterator(++map.begin())));
  55. }
  56. TEST(UnkeyedIteratorTest, PropagatesAtEnd) {
  57. std::map<int, int> map{{1, 2}, {2, 3}};
  58. unkeyed_iterator end(end_aware_iterator(map.end(), map.end()));
  59. EXPECT_EQ(end, iterator::sentinel);
  60. }
  61. TEST(UnkeyedIteratorTest, CanPointToObject) {
  62. std::map<int, int> map{{1, 2}, {2, 3}};
  63. EXPECT_THAT(unkeyed_iterator(map.begin()).operator->(),
  64. &(map.begin()->second));
  65. }