recursive_iterator_map_test.cxx 2.3 KB

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