| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- #include "iterator/end_aware_iterator.hpp"
- #include <vector>
- #include "xcode_gtest_helper.h"
- using end_aware_iterator =
- ::iterator::end_aware_iterator<std::vector<int>::iterator>;
- TEST(EndAwareIteratorTest, IsConstructedFromInputs) {
- std::vector<int> v{1, 2, 3, 4, 5};
- auto begin = v.begin(), end = v.end();
- end_aware_iterator eai(begin, end);
- EXPECT_THAT(eai.current(), begin);
- EXPECT_THAT(eai.end(), end);
- }
- // TODO: This ought to be implemented as a compiles-test
- TEST(EndAwareIteratorTest, CanCastCompatibleIterators) {
- std::vector<int> v{1, 2, 3, 4, 5};
- end_aware_iterator eai(v.begin(), v.end());
- ::iterator::end_aware_iterator<std::vector<int>::const_iterator>{eai};
- }
- TEST(EndAwareIteratorTest, BeginWrapperIsEqualToBegin) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EXPECT_THAT(*v.begin(), *end_aware_iterator(v.begin(), v.end()));
- }
- TEST(EndAwareIteratorTest, MutableActionsArePassthrough) {
- std::vector<int> v{1, 2, 3, 4, 5};
- *end_aware_iterator(v.begin(), v.end()) = -1;
- EXPECT_THAT(v[0], -1);
- }
- TEST(EndAwareIteratorTest, CanTellYouThatItsReachedEnd) {
- std::vector<int> v{1, 2, 3, 4, 5};
- end_aware_iterator it{v.end() - 1, v.end()};
- EXPECT_FALSE(it.at_end());
- ++it;
- EXPECT_THAT(it, end_aware_iterator(v.end(), v.end()));
- EXPECT_TRUE(it.at_end());
- }
- TEST(EndAwareIteratorTest, SingleArgIsEnd) {
- std::vector<int> v{1, 2, 3, 4, 5};
- EXPECT_TRUE(end_aware_iterator(v.begin()).at_end());
- }
- TEST(EndAwareIteratorTest, EmptyIteratorIsEnd) {
- EXPECT_TRUE(end_aware_iterator().at_end());
- }
- TEST(EndAwareIteratorTest, AllEndPointsAreEqual) {
- std::vector<int> v1{1, 2, 3, 4, 5};
- std::vector<int> v2{8, 9, 10};
- EXPECT_THAT(end_aware_iterator(v1.end(), v1.end()),
- end_aware_iterator(v2.end(), v2.end()));
- }
- TEST(EndAwareIteratorTest, PreIncrementAdvancesIterator) {
- std::vector<int> v{1, 2, 3, 4, 5};
- end_aware_iterator eai(v.begin(), v.end());
- EXPECT_THAT(*eai, 1);
- EXPECT_THAT(*++eai, 2);
- EXPECT_THAT(*eai, 2);
- }
- TEST(EndAwareIteratorTest, PostIncrementReturnsCopyOfPrev) {
- std::vector<int> v{1, 2, 3, 4, 5};
- end_aware_iterator eai(v.begin(), v.end());
- EXPECT_THAT(*eai, 1);
- EXPECT_THAT(*eai++, 1);
- EXPECT_THAT(*eai, 2);
- }
- TEST(EndAwareIteratorTest, IncrementOnEndIsUnsafe) {
- std::vector<int> v{1, 2, 3, 4, 5};
- end_aware_iterator it{v.end(), v.end()};
- end_aware_iterator const cp = it;
- ++it;
- EXPECT_NE(it, cp);
- }
|