recursive_iterator_vector_test.cxx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "iterator/recursive_iterator.hpp"
  2. #include <vector>
  3. #include <gmock/gmock.h>
  4. TEST(RecursiveIteratorSingleVectorTest, IterDistanceIsContainerSize) {
  5. std::vector<int> const vec{1, 2, 3, 4, 5};
  6. auto rit = make_recursive_iterator(vec);
  7. decltype(rit) end{};
  8. EXPECT_THAT(std::distance(rit, end), vec.size());
  9. }
  10. TEST(RecursiveIteratorSingleVectorTest, ElementsAreUnwrappedAsATuple) {
  11. std::vector<int> const vec{1, 2, 3, 4, 5};
  12. auto rit = make_recursive_iterator(vec);
  13. // TODO: Collapse into a container instead
  14. for (auto it = vec.begin(), end = vec.end(); it != end; ++it, ++rit) {
  15. EXPECT_THAT(*it, *rit);
  16. }
  17. }
  18. TEST(RecursiveIteratorSingleVectorTest, CanMutatePointedToData) {
  19. std::vector<int> vec{1, 2, 3, 4, 5};
  20. auto rit = make_recursive_iterator(vec);
  21. *rit = 6;
  22. EXPECT_THAT(vec[0], 6);
  23. }
  24. TEST(RecursiveIteratorVectorVectorTest,
  25. IterDistanceIsSumOfInnerContainerSizes) {
  26. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  27. auto rit = make_recursive_iterator(vec);
  28. decltype(rit) end{};
  29. // TODO: Actually perform the summation?
  30. EXPECT_THAT(std::distance(rit, end), 5);
  31. }
  32. TEST(RecursiveIteratorVectorVectorTest, ElementsAreUnwrappedAsATuple) {
  33. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  34. std::vector<int> const expected{1, 2, 3, 4, 5};
  35. auto rit = make_recursive_iterator(vec);
  36. // TODO: Collapse into a container instead
  37. for (auto it = expected.begin(), end = expected.end(); it != end;
  38. ++it, ++rit) {
  39. EXPECT_THAT(*it, *rit);
  40. }
  41. }
  42. TEST(RecursiveIteratorVectorVectorTest, CanMutatePointedToData) {
  43. std::vector<std::vector<int>> vec{{1, 2}, {3, 4, 5}};
  44. auto rit = make_recursive_iterator(vec);
  45. *rit = 6;
  46. EXPECT_THAT(vec[0][0], 6);
  47. }
  48. TEST(BoundedRecursiveIteratorVectorVectorTest, IterDistanceSumOnNLayersSize) {
  49. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  50. auto rit = make_recursive_iterator<1>(vec);
  51. decltype(rit) end{};
  52. EXPECT_THAT(std::distance(rit, end), vec.size());
  53. }
  54. TEST(BoundedRecursiveIteratorVectorVectorTest, ElementsAreUnwrappedAsATuple) {
  55. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  56. auto rit = make_recursive_iterator<1>(vec);
  57. // TODO: Collapse into a container instead
  58. for (auto it = vec.begin(), end = vec.end(); it != end; ++it, ++rit) {
  59. EXPECT_THAT(*it, *rit);
  60. }
  61. }