| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #include "iterator/end_aware_iterator.h"
- #include <iostream>
- #include <vector>
- #include "xcode_gtest_helper.h"
- using iterator::EndAwareIterator;
- TEST(EndAwareIterator, IStreamIterator) {
- std::stringstream ss{"0 1 2 3"};
- EndAwareIterator eai{std::istream_iterator<int>(ss),
- std::istream_iterator<int>()};
- EXPECT_TRUE(iterator::single_pass<decltype(eai)>);
- }
- // TODO: This ought to be implemented as a compiles-test
- TEST(EndAwareIterator, CanCastCompatibleIterators) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EndAwareIterator eai(v.begin(), v.end());
- EndAwareIterator<std::vector<int>::const_iterator>{eai};
- }
- TEST(EndAwareIterator, BeginWrapperIsEqualToBegin) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EXPECT_THAT(*v.begin(), *EndAwareIterator(v.begin(), v.end()));
- }
- TEST(EndAwareIterator, MutableActionsArePassthrough) {
- std::vector<int> v{1, 2, 3, 4, 5};
- *EndAwareIterator(v.begin(), v.end()) = -1;
- EXPECT_THAT(v[0], -1);
- }
- TEST(EndAwareIterator, CanTellYouThatItsReachedEnd) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EndAwareIterator it{v.end() - 1, v.end()};
- EXPECT_FALSE(it.at_end());
- ++it;
- EXPECT_THAT(it, EndAwareIterator(v.end(), v.end()));
- EXPECT_TRUE(it.at_end());
- }
- TEST(EndAwareIterator, EmptyIteratorIsEnd) {
- EXPECT_TRUE(EndAwareIterator<std::vector<int>::iterator>().at_end());
- }
- TEST(EndAwareIterator, PreIncrementAdvancesIterator) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EndAwareIterator eai(v.begin(), v.end());
- EXPECT_THAT(*eai, 1);
- EXPECT_THAT(*++eai, 2);
- EXPECT_THAT(*eai, 2);
- }
- TEST(EndAwareIterator, PostIncrementReturnsCopyOfPrev) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EndAwareIterator eai(v.begin(), v.end());
- EXPECT_THAT(*eai, 1);
- EXPECT_THAT(*eai++, 1);
- EXPECT_THAT(*eai, 2);
- }
- TEST(EndAwareIterator, CanIterateWithSentinel) {
- std::vector<int> v{1, 2, 3, 4, 5};
- size_t count{0};
- for (EndAwareIterator it(v); it != iterator::sentinel; ++it) {
- ++count;
- }
- EXPECT_THAT(count, 5);
- }
|