recursive_iterator_map_test.cxx 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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{
  28. {1, {{1, 1}}},
  29. {2, {{2, 2}, {3, 3}}}
  30. };
  31. auto rit = make_recursive_iterator(map);
  32. decltype(rit) end{ };
  33. // TODO: Actually perform the summation?
  34. EXPECT_THAT(std::distance(rit, end), 3);
  35. }
  36. TEST(RecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
  37. std::map<int, std::map<int, int>> const map{
  38. {1, {{1, 1}}},
  39. {2, {{2, 2}, {3, 3}}}
  40. };
  41. std::vector<std::tuple<int, int, int>> const expected{
  42. {1, 1, 1}, {2, 2, 2}, {2, 3, 3}};
  43. auto rit = make_recursive_iterator(map);
  44. // TODO: Collapse into a container instead
  45. for (auto it = expected.begin(), end = expected.end(); it != end; ++it, ++rit) {
  46. EXPECT_THAT(std::tuple_cat(*it), *rit);
  47. }
  48. }
  49. TEST(RecursiveIteratorMapMapTest, CanMutatePointedToData) {
  50. std::map<int, std::map<int, int>> map{
  51. {1, {{1, 1}}},
  52. {2, {{2, 2}, {3, 3}}}
  53. };
  54. auto rit = make_recursive_iterator(map);
  55. std::get<2>(*rit) = 4;
  56. EXPECT_THAT(map[1][1], 4);
  57. }
  58. TEST(BoundRecursiveIteratorMapMapTest, IterDistanceSumOnNLayersSize) {
  59. std::map<int, std::map<int, int>> map{
  60. {1, {{1, 1}}},
  61. {2, {{2, 2}, {3, 3}}}
  62. };
  63. auto rit = make_recursive_iterator<1>(map);
  64. decltype(rit) end{ };
  65. EXPECT_THAT(std::distance(rit, end), map.size());
  66. }
  67. TEST(BoundRecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
  68. std::map<int, std::map<int, int>> map{
  69. {1, {{1, 1}}},
  70. {2, {{2, 2}, {3, 3}}}
  71. };
  72. auto rit = make_recursive_iterator<1>(map);
  73. // TODO: Collapse into a container instead
  74. for (auto it = map.begin(), end = map.end(); it != end; ++it, ++rit) {
  75. EXPECT_THAT(*it, *rit);
  76. }
  77. }