|
@@ -13,24 +13,25 @@
|
|
|
using iterator::bounded;
|
|
using iterator::bounded;
|
|
|
using iterator::recursive_iterator;
|
|
using iterator::recursive_iterator;
|
|
|
|
|
|
|
|
|
|
+using testing::ElementsAreArray;
|
|
|
using testing::IsEmpty;
|
|
using testing::IsEmpty;
|
|
|
|
|
|
|
|
TEST(RecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
|
|
TEST(RecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
|
|
|
std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
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}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map);
|
|
auto rit = recursive_iterator(map);
|
|
|
- EXPECT_EQ(std::get<3>(*rit), 1);
|
|
|
|
|
- EXPECT_EQ(std::get<3>(*++rit), 2);
|
|
|
|
|
- EXPECT_EQ(std::get<3>(*rit), 2);
|
|
|
|
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 1);
|
|
|
|
|
+ EXPECT_THAT(std::get<3>(*++rit), 2);
|
|
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(RecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
|
|
TEST(RecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
std::map<int, std::map<int, std::map<int, int>>> const map{
|
|
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}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map);
|
|
auto rit = recursive_iterator(map);
|
|
|
- EXPECT_EQ(std::get<3>(*rit), 1);
|
|
|
|
|
- EXPECT_EQ(std::get<3>(*rit++), 1);
|
|
|
|
|
- EXPECT_EQ(std::get<3>(*rit), 2);
|
|
|
|
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 1);
|
|
|
|
|
+ EXPECT_THAT(std::get<3>(*rit++), 1);
|
|
|
|
|
+ EXPECT_THAT(std::get<3>(*rit), 2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(RecursiveIteratorMapTest, IterDistanceIsSumOfInnerContainerSizes) {
|
|
TEST(RecursiveIteratorMapTest, IterDistanceIsSumOfInnerContainerSizes) {
|
|
@@ -38,7 +39,7 @@ TEST(RecursiveIteratorMapTest, IterDistanceIsSumOfInnerContainerSizes) {
|
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map);
|
|
auto rit = recursive_iterator(map);
|
|
|
|
|
|
|
|
- EXPECT_EQ(ranges::distance(rit, iterator::sentinel), 4);
|
|
|
|
|
|
|
+ EXPECT_THAT(ranges::distance(rit, iterator::sentinel), 4);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(RecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
TEST(RecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
@@ -46,11 +47,9 @@ TEST(RecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
std::vector<std::tuple<int, int, int, int>> const expected{
|
|
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}};
|
|
{1, 1, 1, 1}, {2, 2, 2, 2}, {2, 3, 3, 3}, {2, 3, 4, 4}};
|
|
|
- auto rit = recursive_iterator(map);
|
|
|
|
|
|
|
|
|
|
- EXPECT_EQ((ranges::to<std::vector<std::tuple<int, int, int, int>>>(
|
|
|
|
|
- rit, iterator::sentinel)),
|
|
|
|
|
- expected);
|
|
|
|
|
|
|
+ EXPECT_THAT(map | views::recursive | ranges::to<std::vector>(),
|
|
|
|
|
+ ElementsAreArray(expected));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(RecursiveIteratorMapTest, CanMutatePointedToData) {
|
|
TEST(RecursiveIteratorMapTest, CanMutatePointedToData) {
|
|
@@ -58,25 +57,25 @@ TEST(RecursiveIteratorMapTest, CanMutatePointedToData) {
|
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map);
|
|
auto rit = recursive_iterator(map);
|
|
|
std::get<3>(*rit) = 4;
|
|
std::get<3>(*rit) = 4;
|
|
|
- EXPECT_EQ(map[1][1][1], 4);
|
|
|
|
|
|
|
+ EXPECT_THAT(map[1][1][1], 4);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(BoundRecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
|
|
TEST(BoundRecursiveIteratorMapTest, PreIncrementAdvancesIterator) {
|
|
|
std::map<int, std::map<int, std::map<int, int>>> map{
|
|
std::map<int, std::map<int, std::map<int, int>>> map{
|
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map, bounded<2>{});
|
|
auto rit = recursive_iterator(map, bounded<2>{});
|
|
|
- EXPECT_EQ(std::get<2>(*rit), map[1][1]);
|
|
|
|
|
- EXPECT_EQ(std::get<2>(*++rit), map[2][2]);
|
|
|
|
|
- EXPECT_EQ(std::get<2>(*rit), map[2][2]);
|
|
|
|
|
|
|
+ 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(BoundRecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
|
|
TEST(BoundRecursiveIteratorMapTest, PostIncrementReturnsCopyOfPrev) {
|
|
|
std::map<int, std::map<int, std::map<int, int>>> map{
|
|
std::map<int, std::map<int, std::map<int, int>>> map{
|
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map, bounded<2>{});
|
|
auto rit = recursive_iterator(map, bounded<2>{});
|
|
|
- EXPECT_EQ(std::get<2>(*rit), map[1][1]);
|
|
|
|
|
- EXPECT_EQ(std::get<2>(*rit++), map[1][1]);
|
|
|
|
|
- EXPECT_EQ(std::get<2>(*rit), map[2][2]);
|
|
|
|
|
|
|
+ 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) {
|
|
TEST(BoundRecursiveIteratorMapTest, IterDistanceSumOnNLayersSize) {
|
|
@@ -84,7 +83,7 @@ TEST(BoundRecursiveIteratorMapTest, IterDistanceSumOnNLayersSize) {
|
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
{1, {{1, {{1, 1}}}}}, {2, {{2, {{2, 2}}}, {3, {{3, 3}, {4, 4}}}}}};
|
|
|
auto rit = recursive_iterator(map, bounded<2>{});
|
|
auto rit = recursive_iterator(map, bounded<2>{});
|
|
|
|
|
|
|
|
- EXPECT_EQ(ranges::distance(rit, iterator::sentinel), 3);
|
|
|
|
|
|
|
+ EXPECT_THAT(ranges::distance(rit, iterator::sentinel), 3);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(BoundRecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
TEST(BoundRecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
@@ -93,9 +92,8 @@ TEST(BoundRecursiveIteratorMapTest, ElementsAreUnwrappedAsATuple) {
|
|
|
std::vector<std::tuple<int, int, std::map<int, int>>> const expected{
|
|
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}}}};
|
|
{1, 1, {{1, 1}}}, {2, 2, {{2, 2}}}, {2, 3, {{3, 3}, {4, 4}}}};
|
|
|
|
|
|
|
|
- EXPECT_THAT(map | iterator::views::recursive_n<2> |
|
|
|
|
|
- std::ranges::to<std::vector>(),
|
|
|
|
|
- testing::ElementsAreArray(expected));
|
|
|
|
|
|
|
+ EXPECT_THAT(map | views::recursive_n<2> | ranges::to<std::vector>(),
|
|
|
|
|
+ ElementsAreArray(expected));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
TEST(BoundedRecursiveIteratorMapTest, CanMutatePointedToData) {
|
|
TEST(BoundedRecursiveIteratorMapTest, CanMutatePointedToData) {
|