|
|
@@ -6,64 +6,92 @@
|
|
|
|
|
|
#include <gmock/gmock.h>
|
|
|
|
|
|
-TEST(RecursiveIteratorSingleMapTest, IterDistanceIsContainerSize) {
|
|
|
- std::map<int, int> const map{{1, 1}, {2, 2}, {3, 3}};
|
|
|
+TEST(RecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = make_recursive_iterator(map);
|
|
|
- decltype(rit) end{};
|
|
|
- EXPECT_THAT(std::distance(rit, end), map.size());
|
|
|
-}
|
|
|
-
|
|
|
-TEST(RecursiveIteratorSingleMapTest, DataMatchesContainerIterator) {
|
|
|
- std::map<int, int> const map{{1, 1}, {2, 2}, {3, 3}};
|
|
|
- auto rit = make_recursive_iterator(map);
|
|
|
- decltype(map) result(rit, decltype(rit)());
|
|
|
- EXPECT_THAT(result, map);
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 1);
|
|
|
+ EXPECT_THAT(std::get<3>(*++rit), 2);
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 2);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorSingleMapTest, CanMutatePointedToData) {
|
|
|
- std::map<int, int> map{{1, 1}, {2, 2}, {3, 3}};
|
|
|
+TEST(RecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = make_recursive_iterator(map);
|
|
|
- std::get<1>(*rit) = 4;
|
|
|
- EXPECT_THAT(map[1], 4);
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 1);
|
|
|
+ EXPECT_THAT(std::get<3>(*rit++), 1);
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 2);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorMapMapTest, IterDistanceIsSumOfInnerContainerSizes) {
|
|
|
- std::map<int, std::map<int, int>> const map{{1, {{1, 1}}},
|
|
|
- {2, {{2, 2}, {3, 3}}}};
|
|
|
+TEST(RecursiveIteratorMapTest, IterDistanceIsSumOfInnerContainerSizes) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = make_recursive_iterator(map);
|
|
|
decltype(rit) end{};
|
|
|
// TODO: Actually perform the summation?
|
|
|
- EXPECT_THAT(std::distance(rit, end), 3);
|
|
|
+ EXPECT_THAT(std::distance(rit, end), 4);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
|
|
|
- std::map<int, std::map<int, int>> const map{{1, {{1, 1}}},
|
|
|
- {2, {{2, 2}, {3, 3}}}};
|
|
|
- std::vector<std::tuple<int, int, int>> const expected{
|
|
|
- {1, 1, 1}, {2, 2, 2}, {2, 3, 3}};
|
|
|
+TEST(RecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
+ std::vector<std::tuple<int, int, int, int>> const expected{
|
|
|
+ {1, 1, 1, 1}, {2, 2, 2, 2}, {2, 3, 3, 3}, {2, 3, 4, 4}};
|
|
|
auto rit = make_recursive_iterator(map);
|
|
|
decltype(expected) result(rit, decltype(rit)());
|
|
|
EXPECT_THAT(result, expected);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorMapMapTest, CanMutatePointedToData) {
|
|
|
- std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
|
|
|
+TEST(RecursiveIteratorMapTest, CanMutatePointedToData) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = make_recursive_iterator(map);
|
|
|
- std::get<2>(*rit) = 4;
|
|
|
- EXPECT_THAT(map[1][1], 4);
|
|
|
+ std::get<3>(*rit) = 4;
|
|
|
+ EXPECT_THAT(map[1][1][1], 4);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(BoundRecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
+ auto rit = make_recursive_iterator<2>(map);
|
|
|
+ EXPECT_THAT(std::get<2>(*rit), map[1][1]);
|
|
|
+ EXPECT_THAT(std::get<2>(*++rit), map[2][2]);
|
|
|
+ EXPECT_THAT(std::get<2>(*rit), map[2][2]);
|
|
|
}
|
|
|
|
|
|
-TEST(BoundRecursiveIteratorMapMapTest, IterDistanceSumOnNLayersSize) {
|
|
|
- std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
|
|
|
- auto rit = make_recursive_iterator<1>(map);
|
|
|
+TEST(BoundRecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
+ auto rit = make_recursive_iterator<2>(map);
|
|
|
+ EXPECT_THAT(std::get<2>(*rit), map[1][1]);
|
|
|
+ EXPECT_THAT(std::get<2>(*rit++), map[1][1]);
|
|
|
+ EXPECT_THAT(std::get<2>(*rit), map[2][2]);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(BoundRecursiveIteratorMapTest, IterDistanceSumOnNLayersSize) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
+ auto rit = make_recursive_iterator<2>(map);
|
|
|
decltype(rit) end{};
|
|
|
|
|
|
- EXPECT_THAT(std::distance(rit, end), map.size());
|
|
|
+ EXPECT_THAT(std::distance(rit, end), 3);
|
|
|
+}
|
|
|
+
|
|
|
+TEST(BoundRecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
+ std::vector<std::tuple<int, int, std::map<int, int>>> const expected{
|
|
|
+ {1, 1, {{1, 1}}}, {2, 2, {{2, 2}}}, {2, 3, {{3, 3}, {4, 4}}}};
|
|
|
+ auto rit = make_recursive_iterator<2>(map);
|
|
|
+ decltype(expected) result(rit, decltype(rit)());
|
|
|
+ EXPECT_THAT(result, expected);
|
|
|
}
|
|
|
|
|
|
-TEST(BoundRecursiveIteratorMapMapTest, ElementsAreUnwrappedAsATuple) {
|
|
|
- std::map<int, std::map<int, int>> map{{1, {{1, 1}}}, {2, {{2, 2}, {3, 3}}}};
|
|
|
- auto rit = make_recursive_iterator<1>(map);
|
|
|
- decltype(map) result(rit, decltype(rit)());
|
|
|
- EXPECT_THAT(result, map);
|
|
|
+TEST(BoundedRecursiveIteratorMapTest, CanMutatePointedToData) {
|
|
|
+ std::map<int, std::map<int, std::map<int, int>>> map{
|
|
|
+ {1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
+ auto rit = make_recursive_iterator<2>(map);
|
|
|
+ std::get<2>(*rit).clear();
|
|
|
+ EXPECT_THAT(map[1][1], testing::IsEmpty());
|
|
|
}
|