|
|
@@ -9,95 +9,95 @@
|
|
|
#include "xcode_gtest_helper.h"
|
|
|
|
|
|
using iterator::bounded;
|
|
|
-using iterator::end_aware_iterator;
|
|
|
-using iterator::recursive_iterator;
|
|
|
+using iterator::EndAwareIterator;
|
|
|
+using iterator::RecursiveIterator;
|
|
|
|
|
|
using testing::ElementsAreArray;
|
|
|
using testing::Not;
|
|
|
using testing::StaticAssertTypeEq;
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, DoesNotUnwrapString) {
|
|
|
+TEST(RecursiveIterator, DoesNotUnwrapString) {
|
|
|
std::vector<std::string> obj{"A", "B", "C", "D"};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
StaticAssertTypeEq<decltype(rit.operator->()), std::string *>();
|
|
|
|
|
|
EXPECT_THAT(obj | views::recursive | ranges::to<std::vector>(),
|
|
|
ElementsAreArray(obj));
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, CanArrowMultiVector) {
|
|
|
+TEST(RecursiveIterator, CanArrowMultiVector) {
|
|
|
std::vector<std::vector<int>> obj{{{0, 1}}, {{2, 3}}};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
StaticAssertTypeEq<decltype(rit.operator->()), int *>();
|
|
|
EXPECT_THAT(rit.operator->(), &obj[0][0]);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, CanAccessOuterterator) {
|
|
|
+TEST(RecursiveIterator, CanAccessOuterterator) {
|
|
|
std::map<int, std::vector<int>> obj{{1, {{0, 1}}}, {2, {{2, 3}}}};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
|
|
|
- end_aware_iterator<decltype(obj)::iterator> inner = rit;
|
|
|
+ EndAwareIterator<decltype(obj)::iterator> inner = rit;
|
|
|
EXPECT_THAT(&std::get<0>(*rit), &(inner->first));
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, CanAccessInnerIterator) {
|
|
|
+TEST(RecursiveIterator, CanAccessInnerIterator) {
|
|
|
std::map<int, std::vector<int>> obj{{1, {{0, 1}}}, {2, {{2, 3}}}};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
|
|
|
- end_aware_iterator<std::vector<int>::iterator> inner = rit;
|
|
|
+ EndAwareIterator<std::vector<int>::iterator> inner = rit;
|
|
|
EXPECT_THAT(&std::get<1>(*rit), &*inner);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, CanStdGetToAllLayersOfInternalIteration) {
|
|
|
+TEST(RecursiveIterator, CanStdGetToAllLayersOfInternalIteration) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
|
|
|
using mvm_iterator = std::map<int, std::vector<std::map<int, int>>>::iterator;
|
|
|
StaticAssertTypeEq<decltype(std::get<0>(rit)),
|
|
|
- end_aware_iterator<mvm_iterator>>();
|
|
|
+ EndAwareIterator<mvm_iterator>>();
|
|
|
|
|
|
using vm_iterator = std::vector<std::map<int, int>>::iterator;
|
|
|
StaticAssertTypeEq<decltype(std::get<1>(rit)),
|
|
|
- end_aware_iterator<vm_iterator>>();
|
|
|
+ EndAwareIterator<vm_iterator>>();
|
|
|
|
|
|
using m_iterator = std::map<int, int>::iterator;
|
|
|
StaticAssertTypeEq<decltype(std::get<2>(rit)),
|
|
|
- end_aware_iterator<m_iterator>>();
|
|
|
+ EndAwareIterator<m_iterator>>();
|
|
|
|
|
|
using tup_i_i_i = std::tuple<int const &, int const &, int &>;
|
|
|
StaticAssertTypeEq<decltype(*rit), tup_i_i_i>();
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, CanAccessInternalIteratorsWithGet) {
|
|
|
+TEST(RecursiveIterator, CanAccessInternalIteratorsWithGet) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
- EXPECT_THAT(std::get<0>(rit), end_aware_iterator(obj));
|
|
|
- EXPECT_THAT(std::get<1>(rit), end_aware_iterator(obj[1]));
|
|
|
- EXPECT_THAT(std::get<2>(rit), end_aware_iterator(obj[1][0]));
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
+ EXPECT_THAT(std::get<0>(rit), EndAwareIterator(obj));
|
|
|
+ EXPECT_THAT(std::get<1>(rit), EndAwareIterator(obj[1]));
|
|
|
+ EXPECT_THAT(std::get<2>(rit), EndAwareIterator(obj[1][0]));
|
|
|
}
|
|
|
|
|
|
// TODO: This ought to be implemented as a compiles-test
|
|
|
-TEST(RecursiveIteratorTest, CanCastCompatibleIterators) {
|
|
|
+TEST(RecursiveIterator, CanCastCompatibleIterators) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
- iterator::recursive_iterator<decltype(obj)::const_iterator> cit(rit);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
+ iterator::RecursiveIterator<decltype(obj)::const_iterator> cit(rit);
|
|
|
}
|
|
|
|
|
|
-TEST(RecursiveIteratorTest, EmptyCtorIsEnd) {
|
|
|
+TEST(RecursiveIterator, EmptyCtorIsEnd) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj);
|
|
|
+ auto rit = RecursiveIterator(obj);
|
|
|
|
|
|
EXPECT_THAT(rit, Not(iterator::sentinel));
|
|
|
EXPECT_THAT(ranges::distance(rit, iterator::sentinel), 4);
|
|
|
@@ -106,51 +106,51 @@ TEST(RecursiveIteratorTest, EmptyCtorIsEnd) {
|
|
|
EXPECT_THAT(rit, iterator::sentinel);
|
|
|
}
|
|
|
|
|
|
-TEST(BoundedRecursiveIteratorTest, CanStdGetToNLayersOfInternalIteration) {
|
|
|
+TEST(RecursiveIterator_Bounded, CanStdGetToNLayersOfInternalIteration) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj, bounded<2>{});
|
|
|
+ auto rit = RecursiveIterator(obj, bounded<2>{});
|
|
|
|
|
|
using mvm_iterator = std::map<int, std::vector<std::map<int, int>>>::iterator;
|
|
|
StaticAssertTypeEq<decltype(std::get<0>(rit)),
|
|
|
- end_aware_iterator<mvm_iterator>>();
|
|
|
+ EndAwareIterator<mvm_iterator>>();
|
|
|
|
|
|
using vm_iterator = std::vector<std::map<int, int>>::iterator;
|
|
|
StaticAssertTypeEq<decltype(std::get<1>(rit)),
|
|
|
- end_aware_iterator<vm_iterator>>();
|
|
|
+ EndAwareIterator<vm_iterator>>();
|
|
|
|
|
|
using tup_i_mii = std::tuple<int const &, std::map<int, int> &>;
|
|
|
StaticAssertTypeEq<decltype(*rit), tup_i_mii>();
|
|
|
}
|
|
|
|
|
|
-TEST(BoundedRecursiveIteratorTest, CanAccessInternalIteratorsWithGet) {
|
|
|
+TEST(RecursiveIterator_Bounded, CanAccessInternalIteratorsWithGet) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj, bounded<2>{});
|
|
|
- EXPECT_THAT(std::get<0>(rit), end_aware_iterator(obj));
|
|
|
- EXPECT_THAT(std::get<1>(rit), end_aware_iterator(obj[1]));
|
|
|
+ auto rit = RecursiveIterator(obj, bounded<2>{});
|
|
|
+ EXPECT_THAT(std::get<0>(rit), EndAwareIterator(obj));
|
|
|
+ EXPECT_THAT(std::get<1>(rit), EndAwareIterator(obj[1]));
|
|
|
}
|
|
|
|
|
|
// TODO: This ought to be implemented as a compiles-test
|
|
|
-TEST(BoundedRecursiveIteratorTest, CanCastCompatibleIterators) {
|
|
|
+TEST(RecursiveIterator_Bounded, CanCastCompatibleIterators) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj, bounded<2>{});
|
|
|
- iterator::recursive_iterator_n<decltype(obj)::const_iterator, 2> cit(rit);
|
|
|
+ auto rit = RecursiveIterator(obj, bounded<2>{});
|
|
|
+ iterator::RecursiveIteratorN<decltype(obj)::const_iterator, 2> cit(rit);
|
|
|
}
|
|
|
|
|
|
-TEST(BoundedRecursiveIteratorTest, EmptyCtorIsEnd) {
|
|
|
+TEST(RecursiveIterator_Bounded, EmptyCtorIsEnd) {
|
|
|
std::map<int, std::vector<std::map<int, int>>> obj{
|
|
|
{1, {{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{2, {{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj, bounded<3>{});
|
|
|
+ auto rit = RecursiveIterator(obj, bounded<3>{});
|
|
|
EXPECT_THAT(rit, Not(iterator::sentinel));
|
|
|
EXPECT_THAT(ranges::distance(rit, iterator::sentinel), 4);
|
|
|
|
|
|
@@ -158,11 +158,11 @@ TEST(BoundedRecursiveIteratorTest, EmptyCtorIsEnd) {
|
|
|
EXPECT_THAT(rit, iterator::sentinel);
|
|
|
}
|
|
|
|
|
|
-TEST(BoundedRecursiveIteratorTest, CanFetchInnerCollections) {
|
|
|
+TEST(RecursiveIterator_Bounded, CanFetchInnerCollections) {
|
|
|
std::vector<std::vector<std::map<int, int>>> obj{
|
|
|
{{{{1, 1}}, {{2, 2}}}}, // 2 1-element maps
|
|
|
{{{{3, 3}, {4, 4}}}} // 1 2-element map
|
|
|
};
|
|
|
- auto rit = recursive_iterator(obj, bounded<2>{});
|
|
|
+ auto rit = RecursiveIterator(obj, bounded<2>{});
|
|
|
EXPECT_THAT(*rit, obj[0][0]);
|
|
|
}
|