Skip to content

Commit 698e966

Browse files
committed
review
1 parent 8ef2f37 commit 698e966

19 files changed

+972
-40
lines changed

libcxx/test/std/ranges/range.adaptors/range.zip.transform/begin.pass.cpp

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,63 @@ constexpr bool test() {
4242
}
4343

4444
{
45-
// with empty range
46-
std::ranges::zip_transform_view v(MakeTuple{}, SimpleCommon{buffer}, std::ranges::empty_view<int>());
45+
// one range
46+
std::ranges::zip_transform_view v(MakeTuple{}, SimpleCommon{buffer});
47+
auto it = v.begin();
48+
assert(*it == std::make_tuple(1));
49+
auto cit = std::as_const(v).begin();
50+
assert(*cit == std::make_tuple(1));
51+
}
52+
53+
{
54+
// two ranges
55+
std::ranges::zip_transform_view v(GetFirst{}, SimpleCommon{buffer}, std::views::iota(0));
56+
auto it = v.begin();
57+
assert(&*it == &buffer[0]);
58+
auto cit = std::as_const(v).begin();
59+
assert(&*cit == &buffer[0]);
60+
}
61+
62+
{
63+
// three ranges
64+
std::ranges::zip_transform_view v(Tie{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::single_view(2.));
65+
auto it = v.begin();
66+
assert(&std::get<0>(*it) == &buffer[0]);
67+
assert(&std::get<1>(*it) == &buffer[0]);
68+
assert(std::get<2>(*it) == 2.0);
69+
auto cit = std::as_const(v).begin();
70+
assert(&std::get<0>(*cit) == &buffer[0]);
71+
assert(&std::get<1>(*cit) == &buffer[0]);
72+
assert(std::get<2>(*cit) == 2.0);
73+
}
74+
75+
{
76+
// single empty range
77+
std::ranges::zip_transform_view v(MakeTuple{}, std::ranges::empty_view<int>());
78+
assert(v.begin() == v.end());
79+
assert(std::as_const(v).begin() == std::as_const(v).end());
80+
}
81+
82+
{
83+
// empty range at the beginning
84+
std::ranges::zip_transform_view v(
85+
MakeTuple{}, std::ranges::empty_view<int>(), SimpleCommon{buffer}, SimpleCommon{buffer});
86+
assert(v.begin() == v.end());
87+
assert(std::as_const(v).begin() == std::as_const(v).end());
88+
}
89+
90+
{
91+
// empty range in the middle
92+
std::ranges::zip_transform_view v(
93+
MakeTuple{}, SimpleCommon{buffer}, std::ranges::empty_view<int>(), SimpleCommon{buffer});
94+
assert(v.begin() == v.end());
95+
assert(std::as_const(v).begin() == std::as_const(v).end());
96+
}
97+
98+
{
99+
// empty range at the end
100+
std::ranges::zip_transform_view v(
101+
MakeTuple{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::empty_view<int>());
47102
assert(v.begin() == v.end());
48103
assert(std::as_const(v).begin() == std::as_const(v).end());
49104
}

libcxx/test/std/ranges/range.adaptors/range.zip.transform/cpo.pass.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717
#include <cassert>
1818
#include <functional>
1919
#include <type_traits>
20+
#include <vector>
21+
22+
#include "types.h"
2023

2124
struct NotMoveConstructible {
2225
NotMoveConstructible() = default;
@@ -99,6 +102,52 @@ constexpr bool test() {
99102
static_assert(std::is_same_v<std::ranges::range_reference_t<decltype(v)>, int&>);
100103
}
101104

105+
int buffer[] = {1, 2, 3};
106+
{
107+
// one range
108+
auto v = std::views::zip_transform(MakeTuple{}, SimpleCommon{buffer});
109+
assert(std::ranges::equal(v, std::vector{std::tuple(1), std::tuple(2), std::tuple(3)}));
110+
}
111+
112+
{
113+
// two ranges
114+
auto v = std::views::zip_transform(GetFirst{}, SimpleCommon{buffer}, std::views::iota(0));
115+
assert(std::ranges::equal(v, std::vector{1, 2, 3}));
116+
}
117+
118+
{
119+
// three ranges
120+
auto v = std::views::zip_transform(Tie{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::single_view(2.));
121+
assert(std::ranges::equal(v, std::vector{std::tuple(1, 1, 2.0)}));
122+
}
123+
124+
{
125+
// single empty range
126+
auto v = std::views::zip_transform(MakeTuple{}, std::ranges::empty_view<int>());
127+
assert(std::ranges::empty(v));
128+
}
129+
130+
{
131+
// empty range at the beginning
132+
auto v = std::views::zip_transform(
133+
MakeTuple{}, std::ranges::empty_view<int>(), SimpleCommon{buffer}, SimpleCommon{buffer});
134+
assert(std::ranges::empty(v));
135+
}
136+
137+
{
138+
// empty range in the middle
139+
auto v = std::views::zip_transform(
140+
MakeTuple{}, SimpleCommon{buffer}, std::ranges::empty_view<int>(), SimpleCommon{buffer});
141+
assert(std::ranges::empty(v));
142+
}
143+
144+
{
145+
// empty range at the end
146+
auto v = std::views::zip_transform(
147+
MakeTuple{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::empty_view<int>());
148+
assert(std::ranges::empty(v));
149+
}
150+
102151
return true;
103152
}
104153

libcxx/test/std/ranges/range.adaptors/range.zip.transform/ctor.default.pass.cpp

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
#include <cassert>
1616
#include <type_traits>
1717

18+
#include "types.h"
19+
1820
constexpr int buff[] = {1, 2, 3};
1921

2022
struct DefaultConstructibleView : std::ranges::view_base {
@@ -74,6 +76,66 @@ constexpr bool test() {
7476
assert(*it == 6);
7577
}
7678

79+
{
80+
// one range
81+
using View = std::ranges::zip_transform_view<MakeTuple, DefaultConstructibleView>;
82+
View v = View(); // the default constructor is not explicit
83+
auto it = v.begin();
84+
assert(*it == std::make_tuple(1));
85+
}
86+
87+
{
88+
// two ranges
89+
using View = std::ranges::zip_transform_view<MakeTuple, DefaultConstructibleView, std::ranges::iota_view<int>>;
90+
View v = View(); // the default constructor is not explicit
91+
auto it = v.begin();
92+
assert(*it == std::tuple(1, 0));
93+
}
94+
95+
{
96+
// three ranges
97+
using View = std::ranges::
98+
zip_transform_view<MakeTuple, DefaultConstructibleView, DefaultConstructibleView, std::ranges::iota_view<int>>;
99+
View v = View(); // the default constructor is not explicit
100+
auto it = v.begin();
101+
assert(*it == std::tuple(1, 1, 0));
102+
}
103+
104+
{
105+
// single empty range
106+
std::ranges::zip_transform_view v(MakeTuple{}, std::ranges::empty_view<int>());
107+
assert(v.begin() == v.end());
108+
assert(std::as_const(v).begin() == std::as_const(v).end());
109+
}
110+
111+
{
112+
// empty range at the beginning
113+
using View = std::ranges::
114+
zip_transform_view<MakeTuple, std::ranges::empty_view<int>, DefaultConstructibleView, DefaultConstructibleView>;
115+
View v = View(); // the default constructor is not explicit
116+
assert(v.empty());
117+
}
118+
119+
{
120+
// empty range in the middle
121+
using View =
122+
std::ranges::zip_transform_view<MakeTuple,
123+
DefaultConstructibleView,
124+
std::ranges::empty_view<int>,
125+
DefaultConstructibleView,
126+
DefaultConstructibleView>;
127+
View v = View(); // the default constructor is not explicit
128+
assert(v.empty());
129+
}
130+
131+
{
132+
// empty range at the end
133+
using View = std::ranges::
134+
zip_transform_view<MakeTuple, DefaultConstructibleView, DefaultConstructibleView, std::ranges::empty_view<int>>;
135+
View v = View(); // the default constructor is not explicit
136+
assert(v.empty());
137+
}
138+
77139
return true;
78140
}
79141

libcxx/test/std/ranges/range.adaptors/range.zip.transform/ctor.views.pass.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010

1111
// constexpr explicit zip_transform_view(F, Views...)
1212

13+
#include <algorithm>
1314
#include <ranges>
15+
#include <vector>
1416

1517
#include "types.h"
1618

@@ -53,6 +55,50 @@ constexpr bool test() {
5355
int buffer[8] = {1, 2, 3, 4, 5, 6, 7, 8};
5456
int buffer2[4] = {9, 8, 7, 6};
5557

58+
{
59+
// one range
60+
std::ranges::zip_transform_view v(MakeTuple{}, SimpleCommon{buffer2});
61+
assert(std::ranges::equal(v, std::vector{std::tuple(9), std::tuple(8), std::tuple(7), std::tuple(6)}));
62+
}
63+
64+
{
65+
// two ranges
66+
std::ranges::zip_transform_view v(GetFirst{}, SimpleCommon{buffer}, std::views::iota(0));
67+
assert(std::ranges::equal(v, std::vector{1, 2, 3, 4, 5, 6, 7, 8}));
68+
}
69+
70+
{
71+
// three ranges
72+
std::ranges::zip_transform_view v(Tie{}, SimpleCommon{buffer}, SimpleCommon{buffer2}, std::ranges::single_view(2.));
73+
assert(std::ranges::equal(v, std::vector{std::tuple(1, 9, 2.0)}));
74+
}
75+
76+
{
77+
// single empty range
78+
std::ranges::zip_transform_view v(MakeTuple{}, std::ranges::empty_view<int>());
79+
assert(std::ranges::empty(v));
80+
}
81+
82+
{
83+
// empty range at the beginning
84+
std::ranges::zip_transform_view v(
85+
MakeTuple{}, std::ranges::empty_view<int>(), SimpleCommon{buffer}, SimpleCommon{buffer});
86+
assert(std::ranges::empty(v));
87+
}
88+
89+
{
90+
// empty range in the middle
91+
std::ranges::zip_transform_view v(
92+
MakeTuple{}, SimpleCommon{buffer}, std::ranges::empty_view<int>(), SimpleCommon{buffer});
93+
assert(std::ranges::empty(v));
94+
}
95+
96+
{
97+
// empty range at the end
98+
std::ranges::zip_transform_view v(
99+
MakeTuple{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::empty_view<int>());
100+
assert(std::ranges::empty(v));
101+
}
56102
{
57103
// constructor from views
58104
std::ranges::zip_transform_view v(

libcxx/test/std/ranges/range.adaptors/range.zip.transform/end.pass.cpp

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,56 @@ constexpr bool test() {
3636
}
3737

3838
{
39-
// with empty range
40-
std::ranges::zip_transform_view v(MakeTuple{}, SimpleCommon{buffer}, std::ranges::empty_view<int>());
39+
// one range
40+
std::ranges::zip_transform_view v(MakeTuple{}, SimpleCommon{buffer});
41+
auto it = v.begin();
42+
assert( it + 8 == v.end());
43+
assert( it + 8 == std::as_const(v).end());
44+
}
45+
46+
{
47+
// two ranges
48+
std::ranges::zip_transform_view v(GetFirst{}, SimpleCommon{buffer}, std::views::iota(0));
49+
auto it = v.begin();
50+
assert( it + 8 == v.end());
51+
assert( it + 8 == std::as_const(v).end());
52+
}
53+
54+
{
55+
// three ranges
56+
std::ranges::zip_transform_view v(Tie{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::single_view(2.));
57+
auto it = v.begin();
58+
assert( it + 1 == v.end());
59+
assert( it + 1 == std::as_const(v).end());
60+
}
61+
62+
{
63+
// single empty range
64+
std::ranges::zip_transform_view v(MakeTuple{}, std::ranges::empty_view<int>());
65+
assert(v.begin() == v.end());
66+
assert(std::as_const(v).begin() == std::as_const(v).end());
67+
}
68+
69+
{
70+
// empty range at the beginning
71+
std::ranges::zip_transform_view v(
72+
MakeTuple{}, std::ranges::empty_view<int>(), SimpleCommon{buffer}, SimpleCommon{buffer});
73+
assert(v.begin() == v.end());
74+
assert(std::as_const(v).begin() == std::as_const(v).end());
75+
}
76+
77+
{
78+
// empty range in the middle
79+
std::ranges::zip_transform_view v(
80+
MakeTuple{}, SimpleCommon{buffer}, std::ranges::empty_view<int>(), SimpleCommon{buffer});
81+
assert(v.begin() == v.end());
82+
assert(std::as_const(v).begin() == std::as_const(v).end());
83+
}
84+
85+
{
86+
// empty range at the end
87+
std::ranges::zip_transform_view v(
88+
MakeTuple{}, SimpleCommon{buffer}, SimpleCommon{buffer}, std::ranges::empty_view<int>());
4189
assert(v.begin() == v.end());
4290
assert(std::as_const(v).begin() == std::as_const(v).end());
4391
}

0 commit comments

Comments
 (0)