| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- //
- // recursive_iterator_accessors.t.h
- // iterator
- //
- // Created by Sam Jaffe on 2/21/17.
- //
- #pragma once
- #include <cxxtest/TestSuite.h>
- class recursive_iterator_accessors_TestSuite : public CxxTest::TestSuite {
- public:
- void test_access_iterator_types() {
- using layer1 = std::map<int, int>;
- using layer2 = std::vector<layer1>;
- using object_type = std::map<int, layer2>;
- object_type const obj{{ 1, {{{1, 1}}, {{2, 2}}}}, {2, {{{3, 3}, {4, 4}}}}};
- auto rit = make_recursive_iterator(obj);
- TS_ASSERT_EQUALS(typeid(decltype(std::get<0>(rit))).name(),
- typeid(iterator::end_aware_iterator<object_type::const_iterator>).name());
- TS_ASSERT_EQUALS(typeid(decltype(std::get<1>(rit))).name(),
- typeid(iterator::end_aware_iterator<layer2::const_iterator>).name());
- TS_ASSERT_EQUALS(typeid(decltype(std::get<2>(rit))).name(),
- typeid(iterator::end_aware_iterator<layer1::const_iterator>).name());
- }
-
- void test_construct_inplace_recursive_iterator() {
- using layer1 = std::map<int, int>;
- using layer2 = std::vector<layer1>;
- using object_type = std::map<int, layer2>;
- object_type const obj{{ 1, {{{1, 1}}, {{2, 2}}}}, {2, {{{3, 3}, {4, 4}}}}};
- auto const it = make_end_aware_iterator(obj.begin(), obj.end());
- auto const it_1 = ++make_end_aware_iterator(it->second);
- auto const it_2 = make_end_aware_iterator(*it_1);
- TS_ASSERT_THROWS_NOTHING(make_recursive_iterator(it, it_1, it_2));
- }
-
- void test_access_iterator_values_match_inplace() {
- using layer1 = std::map<int, int>;
- using layer2 = std::vector<layer1>;
- using object_type = std::map<int, layer2>;
- object_type const obj{{ 1, {{{1, 1}}, {{2, 2}}}}, {2, {{{3, 3}, {4, 4}}}}};
- auto const it = make_end_aware_iterator(obj.begin(), obj.end());
- auto const it_1 = ++make_end_aware_iterator(it->second);
- auto const it_2 = make_end_aware_iterator(*it_1);
- iterator::recursive_iterator<object_type::const_iterator> rit{
- iterator::in_place,
- it, it_1, it_2
- };
- TS_ASSERT_EQUALS(std::get<0>(rit), it);
- TS_ASSERT_EQUALS(std::get<1>(rit), it_1);
- TS_ASSERT_EQUALS(std::get<2>(rit), it_2);
- }
- };
|