1212// constexpr void // constexpr in C++26
1313// stable_sort(RandomAccessIterator first, RandomAccessIterator last);
1414
15- // ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=2000000
15+ // ADDITIONAL_COMPILE_FLAGS(has-fconstexpr-steps): -fconstexpr-steps=20000000
1616
1717#include < algorithm>
1818#include < array>
@@ -105,7 +105,7 @@ TEST_CONSTEXPR_CXX26 std::array<int, N> sort_already_sorted() {
105105}
106106
107107template <int N, int M>
108- std::array<int , N> sort_reversely_sorted () {
108+ TEST_CONSTEXPR_CXX26 std::array<int , N> sort_reversely_sorted () {
109109 std::array<int , N> array = sort_saw_tooth_pattern<N, M>();
110110 std::reverse (array.begin (), array.end ());
111111 std::stable_sort (array.begin (), array.end ());
@@ -121,33 +121,22 @@ TEST_CONSTEXPR_CXX26 std::array<int, N> sort_swapped_sorted_ranges() {
121121}
122122
123123template <int N, int M>
124- std::array<int , N> sort_reversely_swapped_sorted_ranges () {
124+ TEST_CONSTEXPR_CXX26 std::array<int , N> sort_reversely_swapped_sorted_ranges () {
125125 std::array<int , N> array = sort_saw_tooth_pattern<N, M>();
126126 std::reverse (array.begin (), array.end ());
127127 std::swap_ranges (array.begin (), array.begin () + N / 2 , array.begin () + N / 2 );
128128 std::stable_sort (array.begin (), array.end ());
129129 return array;
130130}
131131
132- #if TEST_STD_VER >= 26
133- # define COMPILE_OR_RUNTIME_ASSERT (func ) \
134- if consteval { \
135- static_assert (func); \
136- } else { \
137- assert (func); \
138- }
139- #else
140- # define COMPILE_OR_RUNTIME_ASSERT (func ) assert (func);
141- #endif
142-
143132template <int N, int M>
144133TEST_CONSTEXPR_CXX26 void test_larger_sorts () {
145134 static_assert (N > 0 , " " );
146135 static_assert (M > 0 , " " );
147136
148137 { // test saw tooth pattern
149- TEST_CONSTEXPR_CXX26 std::array<int , N> array = sort_saw_tooth_pattern<N, M>();
150- COMPILE_OR_RUNTIME_ASSERT (std::is_sorted (array.begin (), array.end ()))
138+ std::array<int , N> array = sort_saw_tooth_pattern<N, M>();
139+ assert (std::is_sorted (array.begin (), array.end ()));
151140 }
152141
153142#if TEST_STD_VER >= 26
@@ -163,29 +152,21 @@ TEST_CONSTEXPR_CXX26 void test_larger_sorts() {
163152 }
164153
165154 { // test sorted pattern
166- TEST_CONSTEXPR_CXX26 std::array<int , N> array = sort_already_sorted<N, M>();
167- COMPILE_OR_RUNTIME_ASSERT (std::is_sorted (array.begin (), array.end ()))
155+ std::array<int , N> array = sort_already_sorted<N, M>();
156+ assert (std::is_sorted (array.begin (), array.end ()));
168157 }
169158
170- #if TEST_STD_VER >= 26
171- if !consteval
172- #endif
173159 { // test reverse sorted pattern
174- // consteval error: "constexpr evaluation hit maximum step limit"
175160 std::array<int , N> array = sort_reversely_sorted<N, M>();
176161 assert (std::is_sorted (array.begin (), array.end ()));
177162 }
178163
179164 { // test swap ranges 2 pattern
180- TEST_CONSTEXPR_CXX26 std::array<int , N> array = sort_swapped_sorted_ranges<N, M>();
181- COMPILE_OR_RUNTIME_ASSERT (std::is_sorted (array.begin (), array.end ()))
165+ std::array<int , N> array = sort_swapped_sorted_ranges<N, M>();
166+ assert (std::is_sorted (array.begin (), array.end ()));
182167 }
183168
184- #if TEST_STD_VER >= 26
185- if !consteval
186- #endif
187169 { // test reverse swap ranges 2 pattern
188- // consteval error: "constexpr evaluation hit maximum step limit"
189170 std::array<int , N> array = sort_reversely_swapped_sorted_ranges<N, M>();
190171 assert (std::is_sorted (array.begin (), array.end ()));
191172 }
@@ -204,14 +185,6 @@ TEST_CONSTEXPR_CXX26 void test_larger_sorts() {
204185 test_larger_sorts<N, N>();
205186}
206187
207- #if TEST_STD_VER >= 26
208- # define COMPILE_AND_RUNTIME_CALL (func ) \
209- func; \
210- static_assert ((func, true ));
211- #else
212- # define COMPILE_AND_RUNTIME_CALL (func ) func;
213- #endif
214-
215188int main (int , char **) {
216189 { // test null range
217190 int d = 0 ;
@@ -233,19 +206,17 @@ int main(int, char**) {
233206 }
234207
235208 { // larger sorts
236- // run- and conditionally compile-time tests
209+ // run- and compile-time tests
237210 test_larger_sorts<256 >();
238211 test_larger_sorts<257 >();
239- test_larger_sorts<499 >();
240- test_larger_sorts<500 >();
241212#if TEST_STD_VER >= 26
242213 static_assert ((test_larger_sorts<256 >(), true ));
243214 static_assert ((test_larger_sorts<257 >(), true ));
244- static_assert ((test_larger_sorts<499 >(), true ));
245- static_assert ((test_larger_sorts<500 >(), true ));
246215#endif
247216
248217 // only runtime tests bc. error: "constexpr evaluation hit maximum step limit"
218+ test_larger_sorts<499 >();
219+ test_larger_sorts<500 >();
249220 test_larger_sorts<997 >();
250221 test_larger_sorts<1000 >();
251222 test_larger_sorts<1009 >();
0 commit comments