// Range v3 library // // Copyright Eric Niebler 2014-present // // Use, modification and distribution is subject to the // Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Project home: https://github.com/ericniebler/range-v3 #include #include #include #include "../simple_test.hpp" #include "../test_utils.hpp" #include "../test_iterators.hpp" struct fortytwo_erator { using difference_type = int; using value_type = int; fortytwo_erator() = default; int operator*() const { return 42; } fortytwo_erator& operator++() { return *this; } void operator++(int) {} }; int main() { using namespace ranges; std::cout << "\nTesting counted\n"; { int rgi[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; auto rng = views::counted(ForwardIterator{rgi}, 10); rng.size(); CPP_assert(sized_range && view_); auto i = rng.begin(); auto b = i.base(); auto c = i.count(); decltype(i) j{b, c}; ::check_equal(rng, {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}); static_assert(std::is_same>>::value, ""); } { std::list l; counted_iterator::iterator> a(l.begin(), 0); counted_iterator::const_iterator> b(l.begin(), 0); detail::ignore_unused( a-a, b-b, a-b, b-a); counted_iterator c(nullptr, 0); counted_iterator d(nullptr, 0); detail::ignore_unused( c-c, d-d, c-d, d-c); } { // Regression test: ensure that we can post-increment a counted_iterator // when decltype(declval()++) is void. CPP_assert(ranges::input_iterator); ranges::counted_iterator c{{}, 42}; c++; } return ::test_result(); }