Skip to content

Commit 02c4e71

Browse files
committed
Addressed comments
1 parent b76e34c commit 02c4e71

File tree

1 file changed

+58
-37
lines changed

1 file changed

+58
-37
lines changed

libcxx/test/std/ranges/range.factories/range.iota.view/empty.pass.cpp

Lines changed: 58 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,61 +19,94 @@
1919
#include "types.h"
2020

2121
template <typename R>
22-
concept HasFreeEmpty = requires(R r) { std::ranges::empty(r); };
23-
24-
template <typename R>
25-
concept HasMemberEmpty = requires(R r) {
22+
concept HasEmpty = requires(R r) {
23+
std::ranges::empty(r);
2624
{ r.empty() } -> std::same_as<bool>;
2725
};
2826

29-
constexpr void test_empty_iota() {
27+
constexpr void test_empty_iota_sfinae() {
3028
std::vector<int> ev;
3129

3230
// Both parameters are non-const
3331
{
3432
auto iv = std::views::iota(std::ranges::begin(ev), std::ranges::end(ev));
3533

36-
static_assert(HasFreeEmpty<decltype(iv)>);
37-
static_assert(HasMemberEmpty<decltype(iv)>);
38-
39-
assert(iv.empty());
34+
static_assert(HasEmpty<decltype(iv)>);
4035
}
4136
// Left parameter is const
4237
{
4338
auto iv = std::views::iota(std::ranges::begin(std::as_const(ev)), std::ranges::end(ev));
4439

45-
static_assert(HasFreeEmpty<decltype(iv)>);
46-
static_assert(HasMemberEmpty<decltype(iv)>);
47-
48-
assert(iv.empty());
40+
static_assert(HasEmpty<decltype(iv)>);
4941
}
5042
// Right parameter is const
5143
{
5244
auto iv = std::views::iota(std::ranges::begin(ev), std::ranges::end(std::as_const(ev)));
5345

54-
static_assert(HasFreeEmpty<decltype(iv)>);
55-
static_assert(HasMemberEmpty<decltype(iv)>);
56-
57-
assert(iv.empty());
46+
static_assert(HasEmpty<decltype(iv)>);
5847
}
5948
// Both parameters are const
6049
{
6150
auto iv = std::views::iota(std::ranges::begin(std::as_const(ev)), std::ranges::end(std::as_const(ev)));
6251

63-
static_assert(HasFreeEmpty<decltype(iv)>);
64-
static_assert(HasMemberEmpty<decltype(iv)>);
52+
static_assert(HasEmpty<decltype(iv)>);
53+
}
54+
}
6555

66-
assert(iv.empty());
56+
constexpr void test_nonempty_iota_sfinae() {
57+
// Default ctr
58+
{
59+
std::ranges::iota_view<Int42<DefaultTo42>> iv;
60+
61+
static_assert(HasEmpty<decltype(iv)>);
62+
}
63+
// Value pass
64+
{
65+
std::ranges::iota_view<SomeInt> iv(SomeInt(94));
66+
67+
static_assert(HasEmpty<decltype(iv)>);
68+
}
69+
70+
{
71+
std::vector<char> v;
72+
auto it = std::back_inserter(v);
73+
auto iv = std::views::iota(it);
74+
75+
static_assert(HasEmpty<decltype(iv)>);
76+
}
77+
{
78+
std::vector<char> v{'b', 'a', 'b', 'a', 'z', 'm', 't'};
79+
auto it = std::back_inserter(v);
80+
auto iv = std::views::iota(it);
81+
82+
static_assert(HasEmpty<decltype(iv)>);
6783
}
84+
}
85+
86+
constexpr void test_empty_iota() {
87+
std::vector<int> ev;
6888

69-
std::vector<char> v{'b', 'a', 'b', 'a', 'z', 'm', 't'};
70-
auto fv = v | std::views::filter([](auto val) { return val == '0'; });
89+
// Both parameters are non-const
90+
{
91+
auto iv = std::views::iota(std::ranges::begin(ev), std::ranges::end(ev));
92+
93+
assert(iv.empty());
94+
}
95+
// Left parameter is const
96+
{
97+
auto iv = std::views::iota(std::ranges::begin(std::as_const(ev)), std::ranges::end(ev));
7198

99+
assert(iv.empty());
100+
}
101+
// Right parameter is const
72102
{
73-
auto iv = std::views::iota(std::ranges::begin(fv), std::ranges::end(fv));
103+
auto iv = std::views::iota(std::ranges::begin(ev), std::ranges::end(std::as_const(ev)));
74104

75-
static_assert(HasFreeEmpty<decltype(iv)>);
76-
static_assert(HasMemberEmpty<decltype(iv)>);
105+
assert(iv.empty());
106+
}
107+
// Both parameters are const
108+
{
109+
auto iv = std::views::iota(std::ranges::begin(std::as_const(ev)), std::ranges::end(std::as_const(ev)));
77110

78111
assert(iv.empty());
79112
}
@@ -84,18 +117,12 @@ constexpr void test_nonempty_iota() {
84117
{
85118
std::ranges::iota_view<Int42<DefaultTo42>> iv;
86119

87-
static_assert(HasFreeEmpty<decltype(iv)>);
88-
static_assert(HasMemberEmpty<decltype(iv)>);
89-
90120
assert(!iv.empty());
91121
}
92122
// Value pass
93123
{
94124
std::ranges::iota_view<SomeInt> iv(SomeInt(94));
95125

96-
static_assert(HasFreeEmpty<decltype(iv)>);
97-
static_assert(HasMemberEmpty<decltype(iv)>);
98-
99126
assert(!iv.empty());
100127
}
101128

@@ -104,19 +131,13 @@ constexpr void test_nonempty_iota() {
104131
auto it = std::back_inserter(v);
105132
auto iv = std::views::iota(it);
106133

107-
static_assert(HasFreeEmpty<decltype(iv)>);
108-
static_assert(HasMemberEmpty<decltype(iv)>);
109-
110134
assert(!iv.empty());
111135
}
112136
{
113137
std::vector<char> v{'b', 'a', 'b', 'a', 'z', 'm', 't'};
114138
auto it = std::back_inserter(v);
115139
auto iv = std::views::iota(it);
116140

117-
static_assert(HasFreeEmpty<decltype(iv)>);
118-
static_assert(HasMemberEmpty<decltype(iv)>);
119-
120141
assert(!iv.empty());
121142
}
122143
}

0 commit comments

Comments
 (0)