1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9// REQUIRES: std-at-least-c++23
10
11// <ranges>
12
13// iterator() = default;
14
15#include <ranges>
16
17#include <cassert>
18#include <initializer_list>
19#include <iterator>
20#include <type_traits>
21#include <utility>
22
23#include "../types.h"
24#include "test_comparisons.h"
25#include "test_iterators.h"
26
27constexpr bool test() {
28 { // `V` and `Pattern` model forward range
29 using Inner = BasicVectorView<int, ViewProperties{}, forward_iterator>;
30 using V = BasicVectorView<Inner, ViewProperties{}, forward_iterator>;
31 using Pattern = Inner;
32 using JWV = std::ranges::join_with_view<V, Pattern>;
33 using Iter = std::ranges::iterator_t<JWV>;
34 using ConstIter = std::ranges::iterator_t<const JWV>;
35
36 // Default constructor of iterator<false> should not be explicit
37 Iter iter = {};
38 assert(testEquality(iter, Iter{}, true));
39
40 // Default constructor of iterator<true> should not be explicit
41 ConstIter citer = {};
42 assert(testEquality(citer, ConstIter{}, true));
43 assert(testEquality(iter, citer, true));
44
45 std::ranges::join_with_view<V, Pattern> jwv(V{Inner{1, 2}, Inner{2, 1}}, Pattern{3, 3});
46 Iter jwv_iter = jwv.begin();
47 ConstIter jwv_citer = std::as_const(jwv).begin();
48 assert(testEquality(jwv_iter, jwv_citer, true));
49
50 assert(testEquality(jwv_iter, iter, false));
51 assert(testEquality(jwv_iter, citer, false));
52 assert(testEquality(jwv_citer, iter, false));
53 assert(testEquality(jwv_citer, citer, false));
54 }
55
56 { // `InnerIter` is not default constructible (does not model forward iterator, JWV cannot be const-accessed)
57 using Inner = BasicVectorView<char, ViewProperties{.common = false}, EqComparableInputIter>;
58 using V = BasicVectorView<Inner, ViewProperties{.common = false}, forward_iterator>;
59 using Pattern = BasicVectorView<char, ViewProperties{}, forward_iterator>;
60 using JWV = std::ranges::join_with_view<V, Pattern>;
61 using Iter = std::ranges::iterator_t<JWV>;
62
63 Iter iter;
64 assert(testEquality(iter, Iter{}, true));
65
66 std::ranges::join_with_view<V, Pattern> jwv(V{Inner{'a', 'b'}, Inner{'c', 'd'}}, Pattern{',', ' '});
67 Iter jwv_iter = jwv.begin();
68 assert(testEquality(jwv_iter, iter, false));
69 }
70
71 return true;
72}
73
74int main(int, char**) {
75 test();
76 static_assert(test());
77
78 return 0;
79}
80

source code of libcxx/test/std/ranges/range.adaptors/range.join.with/range.join.with.iterator/ctor.default.pass.cpp