Skip to content

Commit 8bec694

Browse files
committed
Move range_view tests to their own file. Improve support for C-arrays with range_view's CTAD.
1 parent 3ebe45f commit 8bec694

File tree

3 files changed

+58
-35
lines changed

3 files changed

+58
-35
lines changed

source/containers/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,7 @@ target_sources(containers_test PRIVATE
257257
test/pop_back.cpp
258258
test/push_back.cpp
259259
test/push_back_into_capacity.cpp
260+
test/range_view.cpp
260261
test/shrink_to_fit.cpp
261262
test/stable_vector.cpp
262263
test/take.cpp

source/containers/range_view.cpp

Lines changed: 8 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,8 @@ module;
1010

1111
export module containers.range_view;
1212

13-
import containers.algorithms.compare;
14-
import containers.array;
1513
import containers.begin_end;
14+
import containers.c_array;
1615
import containers.common_iterator_functions;
1716
import containers.forward_random_access_range;
1817
import containers.has_member_size;
@@ -165,6 +164,13 @@ range_view(Range &&) -> range_view<
165164
decltype(bounded::declval<Range &&>().size())
166165
>;
167166

167+
template<typename T, std::size_t size>
168+
range_view(c_array<T, size> &) -> range_view<
169+
contiguous_iterator<T, bounded::constant<size>>,
170+
compute_end_from_size,
171+
bounded::constant_t<bounded::normalize<size>>
172+
>;
173+
168174
template<iterator Iterator, sentinel_for<Iterator> Sentinel>
169175
range_view(Iterator, Sentinel) -> range_view<
170176
Iterator,
@@ -189,37 +195,4 @@ constexpr auto to_range_view(std::pair<Iterator, Sentinel> pair) {
189195
return range_view(std::move(pair).first, std::move(pair).second);
190196
}
191197

192-
193198
} // namespace containers
194-
195-
static_assert(containers::range_view<int *>(nullptr, nullptr).begin() == nullptr);
196-
static_assert(containers::range_view(static_cast<int *>(nullptr), 0).data() == nullptr);
197-
static_assert(containers::range_view(static_cast<int *>(nullptr), static_cast<int *>(nullptr)).data() == nullptr);
198-
static_assert(containers::range_view<int *>(nullptr, nullptr).end() == nullptr);
199-
static_assert(containers::range<containers::range_view<int *>>);
200-
201-
constexpr auto a = containers::array({0, 1, 2, 3, 4});
202-
203-
static_assert(std::same_as<
204-
decltype(containers::range_view(a)),
205-
containers::range_view<
206-
containers::contiguous_iterator<int const, 5_bi>,
207-
containers::compute_end_from_size,
208-
bounded::constant_t<5>
209-
>
210-
>);
211-
212-
static_assert(containers::equal(a, containers::range_view(a)));
213-
214-
static_assert(bounded::convertible_to<
215-
std::string_view,
216-
containers::range_view<int *, int *, std::size_t>
217-
>);
218-
static_assert(bounded::convertible_to<
219-
std::span<int>,
220-
containers::range_view<int *, int *, std::size_t>
221-
>);
222-
static_assert(bounded::convertible_to<
223-
std::span<int const>,
224-
containers::range_view<int *, int *, std::size_t>
225-
>);
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Copyright David Stone 2024.
2+
// Distributed under the Boost Software License, Version 1.0.
3+
// (See accompanying file LICENSE_1_0.txt or copy at
4+
// http://www.boost.org/LICENSE_1_0.txt)
5+
6+
export module containers.test.range_view;
7+
8+
import containers.algorithms.compare;
9+
import containers.array;
10+
import containers.contiguous_iterator;
11+
import containers.has_member_size;
12+
import containers.range;
13+
import containers.range_view;
14+
15+
import bounded;
16+
import std_module;
17+
18+
using namespace bounded::literal;
19+
20+
static_assert(containers::range_view<int *>(nullptr, nullptr).begin() == nullptr);
21+
static_assert(containers::range_view(static_cast<int *>(nullptr), 0).data() == nullptr);
22+
static_assert(containers::range_view(static_cast<int *>(nullptr), static_cast<int *>(nullptr)).data() == nullptr);
23+
static_assert(containers::range_view<int *>(nullptr, nullptr).end() == nullptr);
24+
static_assert(containers::range<containers::range_view<int *>>);
25+
26+
constexpr auto a = containers::array({0, 1, 2, 3, 4});
27+
constexpr auto ctad_a = containers::range_view(a);
28+
static_assert(sizeof(ctad_a) == sizeof(int const *));
29+
static_assert(std::same_as<decltype(ctad_a.size()), bounded::constant_t<5>>);
30+
static_assert(containers::equal(a, ctad_a));
31+
32+
constexpr int b[] = {0, 1, 2, 3, 4};
33+
constexpr auto ctad_b = containers::range_view(b);
34+
static_assert(sizeof(ctad_b) == sizeof(int const *));
35+
static_assert(std::same_as<decltype(ctad_b.size()), bounded::constant_t<5>>);
36+
static_assert(containers::equal(b, ctad_b));
37+
38+
static_assert(bounded::convertible_to<
39+
std::string_view,
40+
containers::range_view<int *, int *, std::size_t>
41+
>);
42+
static_assert(bounded::convertible_to<
43+
std::span<int>,
44+
containers::range_view<int *, int *, std::size_t>
45+
>);
46+
static_assert(bounded::convertible_to<
47+
std::span<int const>,
48+
containers::range_view<int *, int *, std::size_t>
49+
>);

0 commit comments

Comments
 (0)