recursive_iterator_map_test.cxx 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include "iterator/recursive_iterator.hpp"
  2. #include <map>
  3. #include <tuple>
  4. #include <vector>
  5. #include <gmock/gmock.h>
  6. TEST(RecursiveIteratorSingleMapTest, IterDistanceIsContainerSize) {
  7. std::map<int, int> const map{{1, 1}, {2, 2}, {3, 3}};
  8. auto rit = make_recursive_iterator(map);
  9. decltype(rit) end{};
  10. EXPECT_THAT(std::distance(rit, end), map.size());
  11. }
  12. TEST(RecursiveIteratorSingleMapTest, DataMatchesContainerIterator) {
  13. std::map<int, int> const map{{1, 1}, {2, 2}, {3, 3}};
  14. auto rit = make_recursive_iterator(map);
  15. decltype(map) result(rit, decltype(rit)());
  16. EXPECT_THAT(result, map);
  17. }
  18. TEST(RecursiveIteratorSingleMapTest, CanMutatePointedToData) {
  19. std::map<int, int> map{{1, 1}, {2, 2}, {3, 3}};
  20. auto rit = make_recursive_iterator(map);
  21. std::get<1>(*rit) = 4;
  22. EXPECT_THAT(map[1], 4);
  23. }
  24. TEST(RecursiveIteratorMapMapTest, IterDistanceIsSumOfInnerContainerSizes) {
  25. std::map<int, std::map<int, int>> const map{{1, {{1, 1}}},
  26. {2, {{2, 2}, {3, 3}}}};
  27. auto rit = make_recursive_iterator(map);
  28. decltype(rit) end{};
  29. // TODO: Actually perform the summation?
  30. EXPECT_THAT(std::distance(rit, end), 3);
  31. }
  32. TEST(RecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
  33. std::map<int, std::map<int, int>> const map{{1, {{1, 1}}},
  34. {2, {{2, 2}, {3, 3}}}};
  35. std::vector<std::tuple<int, int, int>> const expected{
  36. {1, 1, 1}, {2, 2, 2}, {2, 3, 3}};
  37. auto rit = make_recursive_iterator(map);
  38. decltype(expected) result(rit, decltype(rit)());
  39. EXPECT_THAT(result, expected);
  40. }
  41. TEST(RecursiveIteratorMapMapTest, CanMutatePointedToData) {
  42. std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
  43. auto rit = make_recursive_iterator(map);
  44. std::get<2>(*rit) = 4;
  45. EXPECT_THAT(map[1][1], 4);
  46. }
  47. TEST(BoundRecursiveIteratorMapMapTest, IterDistanceSumOnNLayersSize) {
  48. std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
  49. auto rit = make_recursive_iterator<1>(map);
  50. decltype(rit) end{};
  51. EXPECT_THAT(std::distance(rit, end), map.size());
  52. }
  53. TEST(BoundRecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
  54. std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
  55. auto rit = make_recursive_iterator<1>(map);
  56. decltype(map) result(rit, decltype(rit)());
  57. EXPECT_THAT(result, map);
  58. }