recursive_iterator_vector_test.cxx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "iterator/recursive_iterator.hpp"
  2. #include <vector>
  3. #include <gmock/gmock.h>
  4. TEST(RecursiveIteratorVecTest, PreIncrementAdvancesIterator) {
  5. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  6. auto rit = make_recursive_iterator(vec);
  7. EXPECT_THAT(*rit, 1);
  8. EXPECT_THAT(*++rit, 2);
  9. EXPECT_THAT(*rit, 2);
  10. }
  11. TEST(RecursiveIteratorVecTest, PostIncrementReturnsCopyOfPrev) {
  12. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  13. auto rit = make_recursive_iterator(vec);
  14. EXPECT_THAT(*rit, 1);
  15. EXPECT_THAT(*rit++, 1);
  16. EXPECT_THAT(*rit, 2);
  17. }
  18. TEST(RecursiveIteratorVecTest, IterDistanceIsSumOfInnerContainerSizes) {
  19. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  20. auto rit = make_recursive_iterator(vec);
  21. decltype(rit) end{};
  22. // TODO: Actually perform the summation?
  23. EXPECT_THAT(std::distance(rit, end), 5);
  24. }
  25. TEST(RecursiveIteratorVecTest, FlattensVectorDataLikeJoinIterator) {
  26. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  27. std::vector<int> const expected{1, 2, 3, 4, 5};
  28. auto rit = make_recursive_iterator(vec);
  29. decltype(expected) result(rit, decltype(rit)());
  30. EXPECT_THAT(result, expected);
  31. }
  32. TEST(RecursiveIteratorVecTest, CanMutatePointedToData) {
  33. std::vector<std::vector<std::vector<int>>> vec{{{1, 2}}, {{3}, {4, 5}}};
  34. auto rit = make_recursive_iterator(vec);
  35. *rit = 6;
  36. EXPECT_THAT(vec[0][0][0], 6);
  37. }
  38. TEST(BoundedRecursiveIteratorVecTest, PreIncrementAdvancesIterator) {
  39. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  40. auto rit = make_recursive_iterator<2>(vec);
  41. EXPECT_THAT(*rit, vec[0][0]);
  42. EXPECT_THAT(*++rit, vec[1][0]);
  43. EXPECT_THAT(*rit, vec[1][0]);
  44. }
  45. TEST(BoundedRecursiveIteratorVecTest, PostIncrementReturnsCopyOfPrev) {
  46. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  47. auto rit = make_recursive_iterator<2>(vec);
  48. EXPECT_THAT(*rit, vec[0][0]);
  49. EXPECT_THAT(*rit++, vec[0][0]);
  50. EXPECT_THAT(*rit, vec[1][0]);
  51. }
  52. TEST(BoundedRecursiveIteratorVecTest, IterDistanceSumOnNLayersSize) {
  53. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  54. auto rit = make_recursive_iterator<2>(vec);
  55. decltype(rit) end{};
  56. EXPECT_THAT(std::distance(rit, end), 3);
  57. }
  58. TEST(BoundedRecursiveIteratorVecTest, ElementsAreUnwrappedAsATuple) {
  59. std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
  60. std::vector<std::vector<int>> const expected{{1, 2}, {3}, {4, 5}};
  61. auto rit = make_recursive_iterator<2>(vec);
  62. decltype(expected) result(rit, decltype(rit)());
  63. EXPECT_THAT(result, expected);
  64. }
  65. TEST(BoundedRecursiveIteratorVecTest, CanMutatePointedToData) {
  66. std::vector<std::vector<std::vector<int>>> vec{{{1, 2}}, {{3}, {4, 5}}};
  67. auto rit = make_recursive_iterator<2>(vec);
  68. rit->clear();
  69. EXPECT_THAT(vec[0][0], testing::IsEmpty());
  70. }