| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #include "iterator/join_iterator.h"
- #include <vector>
- #include "xcode_gtest_helper.h"
- using iterator::EndAwareIterator;
- using iterator::JoinIterator;
- using testing::Not;
- TEST(JoinIterator, FirstDereferencedElemIsTheFirstInTheChain) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- EXPECT_THAT(*JoinIterator(mv), mv[0][0]);
- }
- TEST(JoinIterator, HoldsReferenceToContainedElements) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- EXPECT_THAT(JoinIterator(mv).operator->(), &mv[0][0]);
- }
- TEST(JoinIterator, EmptyContainerBeginIsEnd) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- JoinIterator it(mv);
- EXPECT_THAT(it, Not(iterator::sentinel));
- mv.clear();
- EXPECT_THAT(JoinIterator(mv), iterator::sentinel);
- }
- // TODO: This ought to be implemented as a compiles-test
- TEST(JoinIterator, CanCastCompatibleIterators) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- JoinIterator it(mv);
- iterator::JoinIterator<decltype(mv)::const_iterator>{it};
- }
- TEST(JoinIterator, CanAccessInternalIterator) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- auto eai = EndAwareIterator(mv);
- JoinIterator it(eai);
- EXPECT_THAT(it.outer_iterator(), eai);
- }
- TEST(JoinIterator, CanAccessChildIterator) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- JoinIterator it(mv);
- EXPECT_THAT(it.inner_iterator(), EndAwareIterator(mv[0]));
- }
- TEST(JoinIterator, PreIncrementAdvancesIterator) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- JoinIterator it(mv);
- EXPECT_THAT(*it, 1);
- EXPECT_THAT(*++it, 2);
- EXPECT_THAT(*it, 2);
- }
- TEST(JoinIterator, PostIncrementReturnsCopyOfPrev) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- JoinIterator it(mv);
- EXPECT_THAT(*it, 1);
- EXPECT_THAT(*it++, 1);
- EXPECT_THAT(*it, 2);
- }
- TEST(JoinIterator, MovesFromListToListWhenReachingEnd) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {4, 5, 6}};
- JoinIterator it(mv);
- std::advance(it, 2);
- EXPECT_THAT(*++it, mv[1][0]);
- }
- TEST(JoinIterator, SkipsOverEmptyElements) {
- std::vector<std::vector<int>> mv{{1, 2, 3}, {}, {4, 5, 6}};
- JoinIterator it(mv);
- std::advance(it, 2);
- EXPECT_THAT(*++it, mv[2][0]);
- }
|