#include "iterator/recursive_iterator.hpp" #include #include TEST(RecursiveIteratorSingleVectorTest, IterDistanceIsContainerSize) { std::vector const vec{1, 2, 3, 4, 5}; auto rit = make_recursive_iterator(vec); decltype(rit) end{ }; EXPECT_THAT(std::distance(rit, end), vec.size()); } TEST(RecursiveIteratorSingleVectorTest, ElementsAreUnwrappedAsATuple) { std::vector const vec{1, 2, 3, 4, 5}; auto rit = make_recursive_iterator(vec); // TODO: Collapse into a container instead for (auto it = vec.begin(), end = vec.end(); it != end; ++it, ++rit) { EXPECT_THAT(*it, *rit); } } TEST(RecursiveIteratorSingleVectorTest, CanMutatePointedToData) { std::vector vec{1, 2, 3, 4, 5}; auto rit = make_recursive_iterator(vec); *rit = 6; EXPECT_THAT(vec[0], 6); } TEST(RecursiveIteratorVectorVectorTest, IterDistanceIsSumOfInnerContainerSizes) { std::vector> const vec{{1, 2}, {3, 4, 5}}; auto rit = make_recursive_iterator(vec); decltype(rit) end{ }; // TODO: Actually perform the summation? EXPECT_THAT(std::distance(rit, end), 5); } TEST(RecursiveIteratorVectorVectorTest, ElementsAreUnwrappedAsATuple) { std::vector> const vec{{1, 2}, {3, 4, 5}}; std::vector const expected{1, 2, 3, 4, 5}; auto rit = make_recursive_iterator(vec); // TODO: Collapse into a container instead for (auto it = expected.begin(), end = expected.end(); it != end; ++it, ++rit) { EXPECT_THAT(*it, *rit); } } TEST(RecursiveIteratorVectorVectorTest, CanMutatePointedToData) { std::vector> vec{{1, 2}, {3, 4, 5}}; auto rit = make_recursive_iterator(vec); *rit = 6; EXPECT_THAT(vec[0][0], 6); } TEST(BoundedRecursiveIteratorVectorVectorTest, IterDistanceSumOnNLayersSize) { std::vector> const vec{{1, 2}, {3, 4, 5}}; auto rit = make_recursive_iterator<1>(vec); decltype(rit) end{ }; EXPECT_THAT(std::distance(rit, end), vec.size()); } TEST(BoundedRecursiveIteratorVectorVectorTest, ElementsAreUnwrappedAsATuple) { std::vector> const vec{{1, 2}, {3, 4, 5}}; auto rit = make_recursive_iterator<1>(vec); // TODO: Collapse into a container instead for (auto it = vec.begin(), end = vec.end(); it != end; ++it, ++rit) { EXPECT_THAT(*it, *rit); } }