capture_iterator_test.cxx 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. //
  2. // capture_iterator_test.cxx
  3. // iterator-test
  4. //
  5. // Created by Sam Jaffe on 4/1/23.
  6. // Copyright © 2023 Sam Jaffe. All rights reserved.
  7. //
  8. #include "iterator/capture_iterator.h"
  9. #include "ranges.h"
  10. #include "xcode_gtest_helper.h"
  11. using iterator::capture_iterator;
  12. using testing::Address;
  13. using testing::ElementsAre;
  14. using testing::Not;
  15. struct fake_iterator {
  16. using value_type = std::vector<int>;
  17. using reference = std::vector<int>;
  18. using pointer = void;
  19. using difference_type = std::ptrdiff_t;
  20. using iterator_category = std::output_iterator_tag;
  21. std::vector<int> operator*() const { return {0, 1, 2}; }
  22. void operator++() {}
  23. friend bool operator==(fake_iterator, fake_iterator) { return true; }
  24. };
  25. TEST(CaptureIterator, UnderlyingReturnsUnique) {
  26. auto it = fake_iterator();
  27. auto const & result = *it;
  28. EXPECT_THAT(*it, Not(Address(&result)));
  29. }
  30. TEST(CaptureIterator, CachesValue) {
  31. auto it = capture_iterator(fake_iterator());
  32. auto const & result = *it;
  33. EXPECT_THAT(*it, Address(&result));
  34. }