| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #include "iterator/recursive_iterator.h"
- #include <vector>
- #include <iterator/forwards.h>
- #include "ranges.h"
- #include "xcode_gtest_helper.h"
- using iterator::bounded;
- using iterator::RecursiveIterator;
- using testing::ElementsAreArray;
- using testing::IsEmpty;
- TEST(RecursiveIterator_VecVec, PreIncrementAdvancesIterator) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec);
- EXPECT_THAT(*rit, 1);
- EXPECT_THAT(*++rit, 2);
- EXPECT_THAT(*rit, 2);
- }
- TEST(RecursiveIterator_VecVec, PostIncrementReturnsCopyOfPrev) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec);
- EXPECT_THAT(*rit, 1);
- EXPECT_THAT(*rit++, 1);
- EXPECT_THAT(*rit, 2);
- }
- TEST(RecursiveIterator_VecVec, IterDistanceIsSumOfInnerContainerSizes) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec);
- EXPECT_THAT(ranges::distance(rit, iterator::sentinel), 5);
- }
- TEST(RecursiveIterator_VecVec, FlattensVectorDataLikeJoinIterator) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- std::vector<int> const expected{1, 2, 3, 4, 5};
- EXPECT_THAT(vec | views::recursive | ranges::to<std::vector>(),
- ElementsAreArray(expected));
- }
- TEST(RecursiveIterator_VecVec, CanMutatePointedToData) {
- std::vector<std::vector<std::vector<int>>> vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec);
- *rit = 6;
- EXPECT_THAT(vec[0][0][0], 6);
- }
- TEST(RecursiveIterator_Vec_Bounded, PreIncrementAdvancesIterator) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec, bounded<2>{});
- EXPECT_THAT(*rit, vec[0][0]);
- EXPECT_THAT(*++rit, vec[1][0]);
- EXPECT_THAT(*rit, vec[1][0]);
- }
- TEST(RecursiveIterator_Vec_Bounded, PostIncrementReturnsCopyOfPrev) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec, bounded<2>{});
- EXPECT_THAT(*rit, vec[0][0]);
- EXPECT_THAT(*rit++, vec[0][0]);
- EXPECT_THAT(*rit, vec[1][0]);
- }
- TEST(RecursiveIterator_Vec_Bounded, IterDistanceSumOnNLayersSize) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec, bounded<2>{});
- EXPECT_THAT(ranges::distance(rit, iterator::sentinel), 3);
- }
- TEST(RecursiveIterator_Vec_Bounded, ElementsAreUnwrappedAsATuple) {
- std::vector<std::vector<std::vector<int>>> const vec{{{1, 2}}, {{3}, {4, 5}}};
- std::vector<std::vector<int>> const expected{{1, 2}, {3}, {4, 5}};
- EXPECT_THAT(vec | views::recursive_n<2> | ranges::to<std::vector>(),
- ElementsAreArray(expected));
- }
- TEST(RecursiveIterator_Vec_Bounded, CanMutatePointedToData) {
- std::vector<std::vector<std::vector<int>>> vec{{{1, 2}}, {{3}, {4, 5}}};
- auto rit = RecursiveIterator(vec, bounded<2>{});
- rit->clear();
- EXPECT_THAT(vec[0][0], IsEmpty());
- }
|