| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #include "iterator/unkeyed_iterator.h"
- #include <map>
- #include <vector>
- #include "xcode_gtest_helper.h"
- #include "iterator/end_aware_iterator.h"
- using iterator::EndAwareIterator;
- using iterator::ValuesIterator;
- using testing::Ne;
- TEST(UnkeyedIteratorTest, IteratorOnlyReturnsValues) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- std::vector<int> const expected{2, 3};
- std::vector<int> const result{ValuesIterator{map.begin()},
- ValuesIterator{map.end()}};
- EXPECT_THAT(result, expected);
- }
- TEST(UnkeyedIteratorTest, CanModifyIteratedCollectionValues) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- ValuesIterator uit{map.begin()};
- *uit = 4;
- EXPECT_THAT(map[1], 4);
- }
- TEST(UnkeyedIteratorTest, PreIncrementAdvancesIterator) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- ValuesIterator it(map.begin());
- EXPECT_THAT(*it, 2);
- EXPECT_THAT(*++it, 3);
- EXPECT_THAT(*it, 3);
- }
- TEST(UnkeyedIteratorTest, PostIncrementReturnsCopyOfPrev) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- ValuesIterator it(map.begin());
- EXPECT_THAT(*it, 2);
- EXPECT_THAT(*it++, 2);
- EXPECT_THAT(*it, 3);
- }
- TEST(UnkeyedIteratorTest, PreDecrementAdvancesIterator) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- ValuesIterator it(++map.begin());
- EXPECT_THAT(*it, 3);
- EXPECT_THAT(*--it, 2);
- EXPECT_THAT(*it, 2);
- }
- TEST(UnkeyedIteratorTest, PostDecrementReturnsCopyOfPrev) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- ValuesIterator it(++map.begin());
- EXPECT_THAT(*it, 3);
- EXPECT_THAT(*it--, 3);
- EXPECT_THAT(*it, 2);
- }
- TEST(UnkeyedIteratorTest, EqualityIsPassthrough) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- EXPECT_THAT(++ValuesIterator(map.begin()), ValuesIterator(++map.begin()));
- EXPECT_THAT(ValuesIterator(map.begin()), Ne(ValuesIterator(++map.begin())));
- }
- TEST(UnkeyedIteratorTest, PropagatesAtEnd) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- ValuesIterator end(EndAwareIterator(map.end(), map.end()));
- EXPECT_EQ(end, iterator::sentinel);
- }
- TEST(UnkeyedIteratorTest, CanPointToObject) {
- std::map<int, int> map{{1, 2}, {2, 3}};
- EXPECT_THAT(ValuesIterator(map.begin()).operator->(), &(map.begin()->second));
- }
|