10f4b41e0Szoecarver //===----------------------------------------------------------------------===//
20f4b41e0Szoecarver //
30f4b41e0Szoecarver // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40f4b41e0Szoecarver // See https://llvm.org/LICENSE.txt for license information.
50f4b41e0Szoecarver // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60f4b41e0Szoecarver //
70f4b41e0Szoecarver //===----------------------------------------------------------------------===//
80f4b41e0Szoecarver
90f4b41e0Szoecarver // UNSUPPORTED: c++03, c++11, c++14, c++17
100f4b41e0Szoecarver // UNSUPPORTED: libcpp-has-no-incomplete-ranges
110f4b41e0Szoecarver
120f4b41e0Szoecarver // sentinel() = default;
130f4b41e0Szoecarver // constexpr explicit sentinel(sentinel_t<Base> end);
140f4b41e0Szoecarver // constexpr sentinel(sentinel<!Const> s)
150f4b41e0Szoecarver // requires Const && convertible_to<sentinel_t<V>, sentinel_t<Base>>;
160f4b41e0Szoecarver
170f4b41e0Szoecarver #include <ranges>
180f4b41e0Szoecarver #include <cassert>
190f4b41e0Szoecarver
200f4b41e0Szoecarver #include "test_macros.h"
210f4b41e0Szoecarver #include "test_iterators.h"
220f4b41e0Szoecarver #include "../types.h"
230f4b41e0Szoecarver
test()240f4b41e0Szoecarver constexpr bool test() {
250f4b41e0Szoecarver int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};
260f4b41e0Szoecarver
270f4b41e0Szoecarver {
280f4b41e0Szoecarver {
29*610ac8dbSArthur O'Dwyer const std::ranges::take_view<MoveOnlyView> tv(MoveOnlyView{buffer}, 4);
300f4b41e0Szoecarver assert(tv.end() == std::ranges::next(tv.begin(), 4));
310f4b41e0Szoecarver assert(std::ranges::next(tv.begin(), 4) == tv.end());
320f4b41e0Szoecarver }
330f4b41e0Szoecarver
340f4b41e0Szoecarver {
35*610ac8dbSArthur O'Dwyer std::ranges::take_view<MoveOnlyView> tv(MoveOnlyView{buffer}, 4);
360f4b41e0Szoecarver assert(tv.end() == std::ranges::next(tv.begin(), 4));
370f4b41e0Szoecarver assert(std::ranges::next(tv.begin(), 4) == tv.end());
380f4b41e0Szoecarver }
390f4b41e0Szoecarver }
400f4b41e0Szoecarver
410f4b41e0Szoecarver {
42*610ac8dbSArthur O'Dwyer std::ranges::take_view<MoveOnlyView> tvNonConst(MoveOnlyView{buffer}, 4);
43*610ac8dbSArthur O'Dwyer const std::ranges::take_view<MoveOnlyView> tvConst(MoveOnlyView{buffer}, 4);
440f4b41e0Szoecarver assert(tvNonConst.end() == std::ranges::next(tvConst.begin(), 4));
450f4b41e0Szoecarver assert(std::ranges::next(tvConst.begin(), 4) == tvNonConst.end());
460f4b41e0Szoecarver }
470f4b41e0Szoecarver
480f4b41e0Szoecarver return true;
490f4b41e0Szoecarver }
500f4b41e0Szoecarver
main(int,char **)510f4b41e0Szoecarver int main(int, char**) {
520f4b41e0Szoecarver test();
530f4b41e0Szoecarver static_assert(test());
540f4b41e0Szoecarver
550f4b41e0Szoecarver return 0;
560f4b41e0Szoecarver }
57