recursive_iterator_map_test.cxx 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. // TODO: Collapse into a container instead
  16. for (auto it = map.begin(), end = map.end(); it != end; ++it, ++rit) {
  17. EXPECT_THAT(*it, *rit);
  18. }
  19. }
  20. TEST(RecursiveIteratorSingleMapTest, CanMutatePointedToData) {
  21. std::map<int, int> map{{1, 1}, {2, 2}, {3, 3}};
  22. auto rit = make_recursive_iterator(map);
  23. std::get<1>(*rit) = 4;
  24. EXPECT_THAT(map[1], 4);
  25. }
  26. TEST(RecursiveIteratorMapMapTest, IterDistanceIsSumOfInnerContainerSizes) {
  27. std::map<int, std::map<int, int>> const map{{1, {{1, 1}}},
  28. {2, {{2, 2}, {3, 3}}}};
  29. auto rit = make_recursive_iterator(map);
  30. decltype(rit) end{};
  31. // TODO: Actually perform the summation?
  32. EXPECT_THAT(std::distance(rit, end), 3);
  33. }
  34. TEST(RecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
  35. std::map<int, std::map<int, int>> const map{{1, {{1, 1}}},
  36. {2, {{2, 2}, {3, 3}}}};
  37. std::vector<std::tuple<int, int, int>> const expected{
  38. {1, 1, 1}, {2, 2, 2}, {2, 3, 3}};
  39. auto rit = make_recursive_iterator(map);
  40. // TODO: Collapse into a container instead
  41. for (auto it = expected.begin(), end = expected.end(); it != end;
  42. ++it, ++rit) {
  43. EXPECT_THAT(std::tuple_cat(*it), *rit);
  44. }
  45. }
  46. TEST(RecursiveIteratorMapMapTest, CanMutatePointedToData) {
  47. std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
  48. auto rit = make_recursive_iterator(map);
  49. std::get<2>(*rit) = 4;
  50. EXPECT_THAT(map[1][1], 4);
  51. }
  52. TEST(BoundRecursiveIteratorMapMapTest, IterDistanceSumOnNLayersSize) {
  53. std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
  54. auto rit = make_recursive_iterator<1>(map);
  55. decltype(rit) end{};
  56. EXPECT_THAT(std::distance(rit, end), map.size());
  57. }
  58. TEST(BoundRecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
  59. std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
  60. auto rit = make_recursive_iterator<1>(map);
  61. // TODO: Collapse into a container instead
  62. for (auto it = map.begin(), end = map.end(); it != end; ++it, ++rit) {
  63. EXPECT_THAT(*it, *rit);
  64. }
  65. }