Skip to content

Commit e28a3ea

Browse files
committed
fixup! [libc++][NFC] Check for take_view returning different types depending on simple_view-ness
Address helpful feedback.
1 parent a3d7c9b commit e28a3ea

File tree

2 files changed

+56
-56
lines changed

2 files changed

+56
-56
lines changed

libcxx/test/std/ranges/range.adaptors/range.take/begin.pass.cpp

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
// constexpr auto begin() requires (!simple-view<V>);
1212
// constexpr auto begin() const requires range<const V>;
1313

14-
#include <ranges>
1514
#include <cassert>
15+
#include <ranges>
1616
#include <utility>
1717

18-
#include "__ranges/concepts.h"
1918
#include "test_macros.h"
2019
#include "test_iterators.h"
2120
#include "test_range.h"
@@ -29,100 +28,101 @@ struct NonCommonSimpleView : std::ranges::view_base {
2928
static_assert(std::ranges::sized_range<NonCommonSimpleView>);
3029
static_assert(!std::ranges::sized_range<const NonCommonSimpleView>);
3130

31+
using CommonInputIterPtrConstInt = common_input_iterator<const int*>;
32+
using CountedCommonInputIterPtrConstInt = std::counted_iterator<CommonInputIterPtrConstInt>;
33+
3234
constexpr bool test() {
3335
int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};
3436

3537
// simple-view<V> && sized_range<V> && random_access_range<V>
3638
{
37-
static_assert(simple_view<SizedRandomAccessView>);
38-
static_assert(std::ranges::sized_range<SizedRandomAccessView>);
39-
static_assert(std::ranges::random_access_range<SizedRandomAccessView>);
39+
using ViewTested = SizedRandomAccessView;
40+
static_assert(simple_view<ViewTested>);
41+
static_assert(std::ranges::sized_range<ViewTested>);
42+
static_assert(std::ranges::random_access_range<ViewTested>);
4043

41-
std::ranges::take_view<SizedRandomAccessView> tv(SizedRandomAccessView(buffer), 4);
42-
assert(tv.begin() == SizedRandomAccessView(buffer).begin());
44+
std::ranges::take_view<ViewTested> tv(ViewTested(buffer), 4);
45+
assert(tv.begin() == ViewTested(buffer).begin());
4346
ASSERT_SAME_TYPE(decltype(tv.begin()), RandomAccessIter);
44-
}
4547

46-
{
47-
const std::ranges::take_view<SizedRandomAccessView> tv(SizedRandomAccessView(buffer), 4);
48-
assert(tv.begin() == SizedRandomAccessView(buffer).begin());
49-
ASSERT_SAME_TYPE(decltype(tv.begin()), RandomAccessIter);
48+
const std::ranges::take_view<ViewTested> ctv(ViewTested(buffer), 4);
49+
assert(ctv.begin() == ViewTested(buffer).begin());
50+
ASSERT_SAME_TYPE(decltype(ctv.begin()), RandomAccessIter);
5051
}
5152

5253
// simple-view<V> && sized_range<V> && !random_access_range<V>
5354
{
54-
static_assert(simple_view<SizedForwardView>);
55-
static_assert(std::ranges::sized_range<SizedForwardView>);
56-
static_assert(!std::ranges::random_access_range<SizedForwardView>);
55+
using ViewTested = SizedForwardView;
56+
static_assert(simple_view<ViewTested>);
57+
static_assert(std::ranges::sized_range<ViewTested>);
58+
static_assert(!std::ranges::random_access_range<ViewTested>);
5759

58-
std::ranges::take_view<SizedForwardView> tv(SizedForwardView{buffer}, 16); // underlying size is 8
60+
std::ranges::take_view<ViewTested> tv(ViewTested{buffer}, 16); // underlying size is 8
5961
assert(tv.begin() == std::counted_iterator<ForwardIter>(ForwardIter(buffer), 8)); // expect min(8, 16)
6062
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<ForwardIter>);
61-
}
6263

63-
{
64-
const std::ranges::take_view<SizedForwardView> tv(SizedForwardView{buffer}, 4);
65-
assert(tv.begin() == std::counted_iterator<ForwardIter>(ForwardIter(buffer), 4));
66-
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<ForwardIter>);
64+
const std::ranges::take_view<ViewTested> ctv(ViewTested{buffer}, 4);
65+
assert(ctv.begin() == std::counted_iterator<ForwardIter>(ForwardIter(buffer), 4));
66+
ASSERT_SAME_TYPE(decltype(ctv.begin()), std::counted_iterator<ForwardIter>);
6767
}
6868

6969
// simple-view<V> && !sized_range<V>
7070
{
71-
static_assert(simple_view<MoveOnlyView>);
72-
static_assert(simple_view<MoveOnlyView>);
73-
std::ranges::take_view<MoveOnlyView> tv(MoveOnlyView{buffer}, 4);
71+
using ViewTested = MoveOnlyView;
72+
static_assert(simple_view<ViewTested>);
73+
std::ranges::take_view<ViewTested> tv(ViewTested{buffer}, 4);
7474
assert(tv.begin() == std::counted_iterator<int*>(buffer, 4));
7575
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<int*>);
76-
}
7776

78-
{
79-
const std::ranges::take_view<MoveOnlyView> tv(MoveOnlyView{buffer}, 4);
80-
assert(tv.begin() == std::counted_iterator<int*>(buffer, 4));
81-
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<int*>);
77+
const std::ranges::take_view<ViewTested> ctv(ViewTested{buffer}, 4);
78+
assert(ctv.begin() == std::counted_iterator<int*>(buffer, 4));
79+
ASSERT_SAME_TYPE(decltype(ctv.begin()), std::counted_iterator<int*>);
8280
}
8381

8482
// simple-view<V> && sized_range<V> && !sized_range<const V>
8583
{
86-
static_assert(simple_view<NonCommonSimpleView>);
87-
static_assert(std::ranges::sized_range<NonCommonSimpleView>);
88-
static_assert(!std::ranges::sized_range<const NonCommonSimpleView>);
84+
using ViewTested = NonCommonSimpleView;
85+
static_assert(simple_view<ViewTested>);
86+
static_assert(std::ranges::sized_range<ViewTested>);
87+
static_assert(!std::ranges::sized_range<const ViewTested>);
8988

90-
std::ranges::take_view<NonCommonSimpleView> tv{};
89+
std::ranges::take_view<ViewTested> tv{};
9190
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<int*>);
9291
ASSERT_SAME_TYPE(decltype(std::as_const(tv).begin()), std::counted_iterator<int*>);
9392
}
9493

95-
// non simple-view<V> && !sized_range<V>
94+
// !simple-view<V> && !sized_range<V>
9695
{
97-
static_assert(!simple_view<NonSimpleNonSizedView>);
98-
static_assert(!std::ranges::sized_range<NonSimpleNonSizedView>);
96+
using ViewTested = NonSimpleNonSizedView;
97+
static_assert(!simple_view<ViewTested>);
98+
static_assert(!std::ranges::sized_range<ViewTested>);
9999

100-
std::ranges::take_view<NonSimpleNonSizedView> tv{NonSimpleNonSizedView{buffer, buffer + 2}, 4};
100+
std::ranges::take_view<ViewTested> tv{ViewTested{buffer, buffer + 2}, 4};
101101
// The count for the counted iterator is the count of the take_view (i.e., 4)
102-
assert(tv.begin() ==
103-
std::counted_iterator<common_input_iterator<const int*>>(common_input_iterator<const int*>(buffer), 4));
104-
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<common_input_iterator<const int*>>);
102+
assert(tv.begin() == CountedCommonInputIterPtrConstInt(CommonInputIterPtrConstInt(buffer), 4));
103+
ASSERT_SAME_TYPE(decltype(tv.begin()), CountedCommonInputIterPtrConstInt);
105104
}
106105

107-
// non simple-view<V> && sized_range<V>
106+
// !simple-view<V> && sized_range<V>
108107
{
109-
static_assert(!simple_view<NonSimpleSizedView>);
110-
static_assert(std::ranges::sized_range<NonSimpleSizedView>);
108+
using ViewTested = NonSimpleSizedView;
109+
static_assert(!simple_view<ViewTested>);
110+
static_assert(std::ranges::sized_range<ViewTested>);
111111

112-
std::ranges::take_view<NonSimpleSizedView> tv{NonSimpleSizedView{buffer, buffer + 2}, 4};
112+
std::ranges::take_view<ViewTested> tv{ViewTested{buffer, buffer + 2}, 4};
113113
// The count for the counted iterator is the min(2, 4) (i.e., 2).
114-
assert(tv.begin() ==
115-
std::counted_iterator<common_input_iterator<const int*>>(common_input_iterator<const int*>(buffer), 2));
116-
ASSERT_SAME_TYPE(decltype(tv.begin()), std::counted_iterator<common_input_iterator<const int*>>);
114+
assert(tv.begin() == CountedCommonInputIterPtrConstInt(CommonInputIterPtrConstInt(buffer), 2));
115+
ASSERT_SAME_TYPE(decltype(tv.begin()), CountedCommonInputIterPtrConstInt);
117116
}
118117

119-
// non simple-view<V> && sized_range<V> && random_access_range<V>
118+
// !simple-view<V> && sized_range<V> && random_access_range<V>
120119
{
121-
static_assert(!simple_view<NonSimpleSizedRandomView>);
122-
static_assert(std::ranges::sized_range<NonSimpleSizedRandomView>);
123-
static_assert(std::ranges::random_access_range<NonSimpleSizedRandomView>);
120+
using ViewTested = NonSimpleSizedRandomView;
121+
static_assert(!simple_view<ViewTested>);
122+
static_assert(std::ranges::sized_range<ViewTested>);
123+
static_assert(std::ranges::random_access_range<ViewTested>);
124124

125-
std::ranges::take_view<NonSimpleSizedRandomView> tv{NonSimpleSizedRandomView{buffer, buffer + 2}, 4};
125+
std::ranges::take_view<ViewTested> tv{ViewTested{buffer, buffer + 2}, 4};
126126
assert(tv.begin() == random_access_iterator<const int*>(buffer));
127127
ASSERT_SAME_TYPE(decltype(tv.begin()), random_access_iterator<const int*>);
128128
}

libcxx/test/std/ranges/range.adaptors/range.take/types.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,22 +94,22 @@ struct CommonInputView : std::ranges::view_base {
9494
int* end_;
9595
};
9696

97-
using NonSimpleNonSizedView = CommonInputView<common_input_iterator, false, false>;
97+
using NonSimpleNonSizedView = CommonInputView<common_input_iterator, /*Simple=*/false, /*Sized=*/false>;
9898
static_assert(std::ranges::view<NonSimpleNonSizedView>);
9999
static_assert(!simple_view<NonSimpleNonSizedView>);
100100
static_assert(!std::ranges::sized_range<NonSimpleNonSizedView>);
101101

102-
using SimpleViewNonSized = CommonInputView<common_input_iterator, true, false>;
102+
using SimpleViewNonSized = CommonInputView<common_input_iterator, /*Simple=*/true, /*Sized=*/false>;
103103
static_assert(std::ranges::view<SimpleViewNonSized>);
104104
static_assert(simple_view<SimpleViewNonSized>);
105105
static_assert(!std::ranges::sized_range<SimpleViewNonSized>);
106106

107-
using NonSimpleSizedView = CommonInputView<common_input_iterator, false, true>;
107+
using NonSimpleSizedView = CommonInputView<common_input_iterator, /*Simple=*/false, /*Sized=*/true>;
108108
static_assert(std::ranges::view<NonSimpleSizedView>);
109109
static_assert(!simple_view<NonSimpleSizedView>);
110110
static_assert(std::ranges::sized_range<NonSimpleSizedView>);
111111

112-
using NonSimpleSizedRandomView = CommonInputView<random_access_iterator, false, true>;
112+
using NonSimpleSizedRandomView = CommonInputView<random_access_iterator, /*Simple=*/false, /*Sized=*/true>;
113113
static_assert(std::ranges::view<NonSimpleSizedRandomView>);
114114
static_assert(!simple_view<NonSimpleSizedRandomView>);
115115
static_assert(std::ranges::sized_range<NonSimpleSizedRandomView>);

0 commit comments

Comments
 (0)