recursive_iterator_single_level_test.cxx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // recursive_iterator_single_level_test.cxx
  3. // iterator-test
  4. //
  5. // Created by Sam Jaffe on 8/11/20.
  6. // Copyright © 2020 Sam Jaffe. All rights reserved.
  7. //
  8. #include "iterator/recursive_iterator.h"
  9. #include <map>
  10. #include <vector>
  11. #include "ranges.h"
  12. #include "xcode_gtest_helper.h"
  13. using iterator::RecursiveIterator;
  14. using testing::ElementsAreArray;
  15. TEST(RecursiveIterator_Vec, IterDistanceIsContainerSize) {
  16. std::vector<int> const vec{1, 2, 3, 4, 5};
  17. auto rit = RecursiveIterator(vec);
  18. EXPECT_THAT(ranges::distance(rit, iterator::sentinel), vec.size());
  19. }
  20. TEST(RecursiveIterator_Vec, DataMatchesContainerIterator) {
  21. std::vector<int> const vec{1, 2, 3, 4, 5};
  22. EXPECT_THAT(vec | views::recursive | ranges::to<std::vector>(),
  23. ElementsAreArray(vec));
  24. }
  25. TEST(RecursiveIterator_Vec, CanMutatePointedToData) {
  26. std::vector<int> vec{1, 2, 3, 4, 5};
  27. auto rit = RecursiveIterator(vec);
  28. *rit = 6;
  29. EXPECT_THAT(vec[0], 6);
  30. }
  31. TEST(RecursiveIterator_Map, IterDistanceIsContainerSize) {
  32. std::map<int, int> const map{{1, 1}, {2, 2}, {3, 3}};
  33. auto rit = RecursiveIterator(map);
  34. EXPECT_THAT(ranges::distance(rit, iterator::sentinel), map.size());
  35. }
  36. TEST(RecursiveIterator_Map, DataMatchesContainerIterator) {
  37. std::map<int, int> const map{{1, 1}, {2, 2}, {3, 3}};
  38. EXPECT_THAT((map | views::recursive | ranges::to<std::map<int, int>>()), map);
  39. }
  40. TEST(RecursiveIterator_Map, CanMutatePointedToData) {
  41. std::map<int, int> map{{1, 1}, {2, 2}, {3, 3}};
  42. auto rit = RecursiveIterator(map);
  43. std::get<1>(*rit) = 4;
  44. EXPECT_THAT(map[1], 4);
  45. }