recursive_iterator_vector_test.cxx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. decltype(vec) result(rit, decltype(rit)());
  14. EXPECT_THAT(result, vec);
  15. }
  16. TEST(RecursiveIteratorSingleVectorTest, CanMutatePointedToData) {
  17. std::vector<int> vec{1, 2, 3, 4, 5};
  18. auto rit = make_recursive_iterator(vec);
  19. *rit = 6;
  20. EXPECT_THAT(vec[0], 6);
  21. }
  22. TEST(RecursiveIteratorVectorVectorTest,
  23. IterDistanceIsSumOfInnerContainerSizes) {
  24. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  25. auto rit = make_recursive_iterator(vec);
  26. decltype(rit) end{};
  27. // TODO: Actually perform the summation?
  28. EXPECT_THAT(std::distance(rit, end), 5);
  29. }
  30. TEST(RecursiveIteratorVectorVectorTest, ElementsAreUnwrappedAsATuple) {
  31. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  32. std::vector<int> const expected{1, 2, 3, 4, 5};
  33. auto rit = make_recursive_iterator(vec);
  34. decltype(expected) result(rit, decltype(rit)());
  35. EXPECT_THAT(result, expected);
  36. }
  37. TEST(RecursiveIteratorVectorVectorTest, CanMutatePointedToData) {
  38. std::vector<std::vector<int>> vec{{1, 2}, {3, 4, 5}};
  39. auto rit = make_recursive_iterator(vec);
  40. *rit = 6;
  41. EXPECT_THAT(vec[0][0], 6);
  42. }
  43. TEST(BoundedRecursiveIteratorVectorVectorTest, IterDistanceSumOnNLayersSize) {
  44. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  45. auto rit = make_recursive_iterator<1>(vec);
  46. decltype(rit) end{};
  47. EXPECT_THAT(std::distance(rit, end), vec.size());
  48. }
  49. TEST(BoundedRecursiveIteratorVectorVectorTest, ElementsAreUnwrappedAsATuple) {
  50. std::vector<std::vector<int>> const vec{{1, 2}, {3, 4, 5}};
  51. auto rit = make_recursive_iterator<1>(vec);
  52. decltype(vec) result(rit, decltype(rit)());
  53. EXPECT_THAT(result, vec);
  54. }