// Range v3 library // // Copyright Johel Guerrero 2019 // // 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 #include #include #include #include #include #include #include #include #include #include "../test_iterators.hpp" #include "../test_utils.hpp" int main() { using namespace ranges; int ia[] = {0, 1, 2, 3, 4, 3, 2, 1, 2, 3, 4, 3, 2, 1, 0}; int ib[] = {4, 3, 2, 1, 2, 3, 4}; constexpr auto bs = distance(ib); auto p = [](int i) { return i < 4; }; auto rng = views::trim(ia, p); static_assert(same_as, iterator_t>, ""); CPP_assert(view_); CPP_assert(contiguous_range); CPP_assert(common_range); CPP_assert(!sized_range); check_equal(rng, ib); auto && rng2 = views::trim(ib, p); check_equal(views::addressof(rng2), views::addressof(ib)); auto rng3 = ia | views::drop(4) | views::trim(p); static_assert(same_as, iterator_t>, ""); CPP_assert(view_); CPP_assert(contiguous_range); CPP_assert(common_range); CPP_assert(!sized_range); check_equal(rng3, ib); auto rng4 = ia | views::reverse | views::drop(4) | views::trim(p); static_assert(same_as, iterator_t>, ""); CPP_assert(view_); CPP_assert(random_access_range); CPP_assert(common_range); CPP_assert(!sized_range); check_equal(rng4, ib); check_equal(views::trim(ia, p), ia | views::drop_while(p) | views::reverse | views::drop_while(p)); auto rng5 = make_subrange(ib + 1, ib + bs - 1) | views::trim(p); static_assert(same_as, iterator_t>, ""); CPP_assert(view_); CPP_assert(contiguous_range); CPP_assert(common_range); CPP_assert(!sized_range); CHECK(empty(rng5)); auto rng6 = make_subrange(ib, ib + bs - 1) | views::trim(p); CHECK(distance(rng6) == 1); check_equal(&front(rng6), ib); auto rng7 = ib | views::tail | views::trim(p); static_assert(same_as, iterator_t>, ""); CPP_assert(view_); CPP_assert(contiguous_range); CPP_assert(common_range); CPP_assert(!sized_range); CHECK(distance(rng7) == 1); check_equal(&front(rng7), ib + bs - 1); auto rng8 = make_subrange(BidirectionalIterator(ia), BidirectionalIterator(ia + distance(ia))) | views::trim(p); static_assert(same_as, iterator_t>, ""); CPP_assert(view_); CPP_assert(bidirectional_range); CPP_assert(common_range); CPP_assert(!sized_range); return test_result(); }