iterator.cpp 991 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include <type_traits>
  2. #include <utility>
  3. #include <vector>
  4. #include <gtest/gtest.h>
  5. #include <entt/core/iterator.hpp>
  6. struct clazz {
  7. int value{0};
  8. };
  9. TEST(InputIteratorPointer, Functionalities) {
  10. clazz instance{};
  11. entt::input_iterator_pointer ptr{std::move(instance)};
  12. ptr->value = 42;
  13. ASSERT_EQ(instance.value, 0);
  14. ASSERT_EQ(ptr->value, 42);
  15. }
  16. TEST(IterableAdaptor, Functionalities) {
  17. std::vector<int> vec{1, 2};
  18. entt::iterable_adaptor iterable{vec.begin(), vec.end()};
  19. decltype(iterable) other{};
  20. ASSERT_NO_THROW(other = iterable);
  21. ASSERT_NO_THROW(std::swap(other, iterable));
  22. ASSERT_EQ(iterable.begin(), vec.begin());
  23. ASSERT_EQ(iterable.end(), vec.end());
  24. ASSERT_EQ(*iterable.cbegin(), 1);
  25. ASSERT_EQ(*++iterable.cbegin(), 2);
  26. ASSERT_EQ(++iterable.cbegin(), --iterable.end());
  27. for(auto value: entt::iterable_adaptor<const int *, const void *>{vec.data(), vec.data() + 1u}) {
  28. ASSERT_EQ(value, 1);
  29. }
  30. }