recursive_iterator_vector_test.cxx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include "iterator/recursive_iterator.hpp"
  2. #include <vector>
  3. #include <gmock/gmock.h>
  4. TEST(RecursiveIteratorVecTest, IterDistanceIsSumOfInnerContainerSizes) {
  5. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  6. auto rit = make_recursive_iterator(vec);
  7. decltype(rit) end{};
  8. // TODO: Actually perform the summation?
  9. EXPECT_THAT(std::distance(rit, end), 5);
  10. }
  11. TEST(RecursiveIteratorVecTest, FlattensVectorDataLikeJoinIterator) {
  12. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  13. std::vector<int> const expected{1, 2, 3, 4, 5};
  14. auto rit = make_recursive_iterator(vec);
  15. decltype(expected) result(rit, decltype(rit)());
  16. EXPECT_THAT(result, expected);
  17. }
  18. TEST(RecursiveIteratorVecTest, CanMutatePointedToData) {
  19. std::vector<std::vector<std::vector<int>>> vec{{{1, 2}}, {{3}, {4, 5}}};
  20. auto rit = make_recursive_iterator(vec);
  21. *rit = 6;
  22. EXPECT_THAT(vec[0][0][0], 6);
  23. }
  24. TEST(BoundedRecursiveIteratorVecTest, IterDistanceSumOnNLayersSize) {
  25. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  26. auto rit = make_recursive_iterator<2>(vec);
  27. decltype(rit) end{};
  28. EXPECT_THAT(std::distance(rit, end), 3);
  29. }
  30. TEST(BoundedRecursiveIteratorVecTest, ElementsAreUnwrappedAsATuple) {
  31. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  32. std::vector<std::vector<int>> const expected{{1, 2}, {3}, {4, 5}};
  33. auto rit = make_recursive_iterator<2>(vec);
  34. decltype(expected) result(rit, decltype(rit)());
  35. EXPECT_THAT(result, expected);
  36. }
  37. TEST(BoundedRecursiveIteratorVecTest, CanMutatePointedToData) {
  38. std::vector<std::vector<std::vector<int>>> vec{{{1, 2}}, {{3}, {4, 5}}};
  39. auto rit = make_recursive_iterator<2>(vec);
  40. rit->clear();
  41. EXPECT_THAT(vec[0][0], testing::IsEmpty());
  42. }