// // capture_iterator_test.cxx // iterator-test // // Created by Sam Jaffe on 4/1/23. // Copyright © 2023 Sam Jaffe. All rights reserved. // #include "iterator/capture_iterator.h" #include "ranges.h" #include "xcode_gtest_helper.h" using iterator::CaptureIterator; using testing::Address; using testing::ElementsAre; using testing::Not; struct fake_iterator { using value_type = std::vector; using reference = std::vector; using pointer = void; using difference_type = std::ptrdiff_t; using iterator_category = std::output_iterator_tag; std::vector operator*() const { return {0, 1, 2}; } void operator++() {} friend bool operator==(fake_iterator, fake_iterator) { return true; } }; TEST(CaptureIterator, UnderlyingReturnsUnique) { auto it = fake_iterator(); auto const & result = *it; EXPECT_THAT(*it, Not(Address(&result))); } TEST(CaptureIterator, CachesValue) { auto it = CaptureIterator(fake_iterator()); auto const & result = *it; EXPECT_THAT(*it, Address(&result)); }