iterator.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #include <cstddef>
  2. #include <utility>
  3. #include <vector>
  4. #include <gtest/gtest.h>
  5. #include <common/boxed_type.h>
  6. #include <entt/core/iterator.hpp>
  7. TEST(InputIteratorPointer, Functionalities) {
  8. entt::input_iterator_pointer ptr{test::boxed_int{0}};
  9. ASSERT_EQ(ptr->value, 0);
  10. ptr->value = 2;
  11. ASSERT_EQ(ptr->value, 2);
  12. ASSERT_EQ(ptr->value, (*ptr).value);
  13. ASSERT_EQ(ptr.operator->(), &ptr.operator*());
  14. }
  15. TEST(IotaIterator, Functionalities) {
  16. entt::iota_iterator<std::size_t> first{};
  17. const entt::iota_iterator<std::size_t> last{2u};
  18. ASSERT_NE(first, last);
  19. ASSERT_FALSE(first == last);
  20. ASSERT_TRUE(first != last);
  21. ASSERT_EQ(*first++, 0u);
  22. ASSERT_EQ(*first, 1u);
  23. ASSERT_EQ(*++first, *last);
  24. ASSERT_EQ(*first, 2u);
  25. }
  26. TEST(IterableAdaptor, Functionalities) {
  27. std::vector<int> vec{1, 2};
  28. entt::iterable_adaptor iterable{vec.begin(), vec.end()};
  29. decltype(iterable) other{};
  30. ASSERT_NO_THROW(other = iterable);
  31. ASSERT_NO_THROW(std::swap(other, iterable));
  32. ASSERT_EQ(iterable.begin(), vec.begin());
  33. ASSERT_EQ(iterable.end(), vec.end());
  34. ASSERT_EQ(*iterable.cbegin(), 1);
  35. ASSERT_EQ(*++iterable.cbegin(), 2);
  36. ASSERT_EQ(++iterable.cbegin(), --iterable.end());
  37. for(auto value: entt::iterable_adaptor<const int *, const void *>{&vec[0u], &vec[1u]}) {
  38. ASSERT_EQ(value, 1);
  39. }
  40. }