1*065dc485SJakub Mazurkiewicz //===----------------------------------------------------------------------===//
2*065dc485SJakub Mazurkiewicz //
3*065dc485SJakub Mazurkiewicz // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*065dc485SJakub Mazurkiewicz // See https://llvm.org/LICENSE.txt for license information.
5*065dc485SJakub Mazurkiewicz // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*065dc485SJakub Mazurkiewicz //
7*065dc485SJakub Mazurkiewicz //===----------------------------------------------------------------------===//
8*065dc485SJakub Mazurkiewicz
9*065dc485SJakub Mazurkiewicz // UNSUPPORTED: c++03, c++11, c++14, c++17, c++20
10*065dc485SJakub Mazurkiewicz
11*065dc485SJakub Mazurkiewicz // <ranges>
12*065dc485SJakub Mazurkiewicz
13*065dc485SJakub Mazurkiewicz // std::ranges::chunk_by_view<V>::<iterator>() = default;
14*065dc485SJakub Mazurkiewicz
15*065dc485SJakub Mazurkiewicz #include <ranges>
16*065dc485SJakub Mazurkiewicz
17*065dc485SJakub Mazurkiewicz #include <cassert>
18*065dc485SJakub Mazurkiewicz #include <functional>
19*065dc485SJakub Mazurkiewicz #include <type_traits>
20*065dc485SJakub Mazurkiewicz #include <utility>
21*065dc485SJakub Mazurkiewicz
22*065dc485SJakub Mazurkiewicz #include "../types.h"
23*065dc485SJakub Mazurkiewicz #include "test_iterators.h"
24*065dc485SJakub Mazurkiewicz
25*065dc485SJakub Mazurkiewicz template <class Iterator, bool IsNoexcept>
testDefaultConstructible()26*065dc485SJakub Mazurkiewicz constexpr void testDefaultConstructible() {
27*065dc485SJakub Mazurkiewicz // Make sure the iterator is default constructible.
28*065dc485SJakub Mazurkiewicz using ChunkByView = std::ranges::chunk_by_view<View<Iterator>, std::ranges::less_equal>;
29*065dc485SJakub Mazurkiewicz using ChunkByIterator = std::ranges::iterator_t<ChunkByView>;
30*065dc485SJakub Mazurkiewicz ChunkByIterator i{};
31*065dc485SJakub Mazurkiewicz ChunkByIterator j;
32*065dc485SJakub Mazurkiewicz assert(i == j);
33*065dc485SJakub Mazurkiewicz static_assert(noexcept(ChunkByIterator{}) == IsNoexcept);
34*065dc485SJakub Mazurkiewicz }
35*065dc485SJakub Mazurkiewicz
tests()36*065dc485SJakub Mazurkiewicz constexpr bool tests() {
37*065dc485SJakub Mazurkiewicz testDefaultConstructible<forward_iterator<int*>, /*IsNoexcept=*/false>();
38*065dc485SJakub Mazurkiewicz testDefaultConstructible<bidirectional_iterator<int*>, /*IsNoexcept=*/false>();
39*065dc485SJakub Mazurkiewicz testDefaultConstructible<random_access_iterator<int*>, /*IsNoexcept=*/false>();
40*065dc485SJakub Mazurkiewicz testDefaultConstructible<contiguous_iterator<int*>, /*IsNoexcept=*/false>();
41*065dc485SJakub Mazurkiewicz testDefaultConstructible<int*, /*IsNoexcept=*/true>();
42*065dc485SJakub Mazurkiewicz return true;
43*065dc485SJakub Mazurkiewicz }
44*065dc485SJakub Mazurkiewicz
main(int,char **)45*065dc485SJakub Mazurkiewicz int main(int, char**) {
46*065dc485SJakub Mazurkiewicz tests();
47*065dc485SJakub Mazurkiewicz static_assert(tests());
48*065dc485SJakub Mazurkiewicz
49*065dc485SJakub Mazurkiewicz return 0;
50*065dc485SJakub Mazurkiewicz }
51