2424
2525#include " almost_satisfies_types.h"
2626#include " test_iterators.h"
27+ #include " type_algorithms.h"
2728
2829// Test constraints of the (iterator, sentinel) overload.
2930// ======================================================
3031
3132template <class Iter = int *, class Sent = int *>
32- concept HasRotateIter =
33- requires (Iter&& iter, Sent&& sent) {
34- std::ranges::rotate (std::forward<Iter>(iter), std::forward<Iter>(iter), std::forward<Sent>(sent));
35- };
33+ concept HasRotateIter = requires (Iter&& iter, Sent&& sent) {
34+ std::ranges::rotate (std::forward<Iter>(iter), std::forward<Iter>(iter), std::forward<Sent>(sent));
35+ };
3636
3737static_assert (HasRotateIter<int *, int *>);
3838
@@ -48,10 +48,9 @@ static_assert(!HasRotateIter<int*, SentinelForNotWeaklyEqualityComparableWith>);
4848// =========================================
4949
5050template <class Range >
51- concept HasRotateRange =
52- requires (Range&& range, std::ranges::iterator_t <Range> iter) {
53- std::ranges::rotate (std::forward<Range>(range), iter);
54- };
51+ concept HasRotateRange = requires (Range&& range, std::ranges::iterator_t <Range> iter) {
52+ std::ranges::rotate (std::forward<Range>(range), iter);
53+ };
5554
5655template <class T >
5756using R = UncheckedRange<T>;
@@ -73,10 +72,10 @@ constexpr void test_one(const std::array<int, N> input, std::size_t mid_index, s
7372 assert (mid_index <= N);
7473
7574 { // (iterator, sentinel) overload.
76- auto in = input;
75+ auto in = input;
7776 auto begin = Iter (in.data ());
78- auto mid = Iter (in.data () + mid_index);
79- auto end = Sent (Iter (in.data () + in.size ()));
77+ auto mid = Iter (in.data () + mid_index);
78+ auto end = Sent (Iter (in.data () + in.size ()));
8079
8180 std::same_as<std::ranges::subrange<Iter>> decltype (auto ) result = std::ranges::rotate (begin, mid, end);
8281 assert (base (result.begin ()) == in.data () + in.size () - mid_index);
@@ -85,10 +84,10 @@ constexpr void test_one(const std::array<int, N> input, std::size_t mid_index, s
8584 }
8685
8786 { // (range) overload.
88- auto in = input;
87+ auto in = input;
8988 auto begin = Iter (in.data ());
90- auto mid = Iter (in.data () + mid_index);
91- auto end = Sent (Iter (in.data () + in.size ()));
89+ auto mid = Iter (in.data () + mid_index);
90+ auto end = Sent (Iter (in.data () + in.size ()));
9291 auto range = std::ranges::subrange (std::move (begin), std::move (end));
9392
9493 std::same_as<std::ranges::subrange<Iter>> decltype (auto ) result = std::ranges::rotate (range, mid);
@@ -132,32 +131,21 @@ constexpr void test_iter_sent() {
132131 test_one<Iter, Sent, 7 >({1 , 2 , 3 , 4 , 5 , 6 , 7 }, 7 , {1 , 2 , 3 , 4 , 5 , 6 , 7 });
133132}
134133
135- template <class Iter >
136- constexpr void test_iter () {
137- test_iter_sent<Iter, Iter>();
138- test_iter_sent<Iter, sentinel_wrapper<Iter>>();
139- }
140-
141- constexpr void test_iterators () {
142- test_iter<forward_iterator<int *>>();
143- test_iter<bidirectional_iterator<int *>>();
144- test_iter<random_access_iterator<int *>>();
145- test_iter<contiguous_iterator<int *>>();
146- test_iter<int *>();
147- }
148-
149134constexpr bool test () {
150- test_iterators ();
135+ types::for_each (types::forward_iterator_list<int *>(), []<class Iter >() {
136+ test_iter_sent<Iter, Iter>();
137+ test_iter_sent<Iter, sentinel_wrapper<Iter>>();
138+ });
151139
152140 { // Complexity: at most `last - first` swaps.
153141 const std::array input = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 };
154- auto expected = static_cast <int >(input.size ());
142+ auto expected = static_cast <int >(input.size ());
155143
156144 {
157- auto in = input;
158- int swaps = 0 ;
145+ auto in = input;
146+ int swaps = 0 ;
159147 auto begin = adl::Iterator::TrackSwaps (in.data (), swaps);
160- auto end = adl::Iterator::TrackSwaps (in.data () + in.size (), swaps);
148+ auto end = adl::Iterator::TrackSwaps (in.data () + in.size (), swaps);
161149
162150 for (std::size_t mid = 0 ; mid != input.size (); ++mid) {
163151 std::ranges::rotate (begin, begin + mid, end);
@@ -166,10 +154,10 @@ constexpr bool test() {
166154 }
167155
168156 {
169- auto in = input;
170- int swaps = 0 ;
157+ auto in = input;
158+ int swaps = 0 ;
171159 auto begin = adl::Iterator::TrackSwaps (in.data (), swaps);
172- auto end = adl::Iterator::TrackSwaps (in.data () + in.size (), swaps);
160+ auto end = adl::Iterator::TrackSwaps (in.data () + in.size (), swaps);
173161 auto range = std::ranges::subrange (begin, end);
174162
175163 for (std::size_t mid = 0 ; mid != input.size (); ++mid) {
0 commit comments