recursive_iterator_vector_test.cxx 2.9 KB

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