2323#include " test_iterators.h"
2424#include " type_algorithms.h"
2525
26- template <class Iter1 >
27- struct Test1 {
28- template <class Iter2 >
29- TEST_CONSTEXPR_CXX20 void operator ()() {
30- int a[] = {1 , 2 , 3 };
31- int b[] = {4 , 5 , 6 };
32- Iter2 r = std::swap_ranges (Iter1 (a), Iter1 (a + 3 ), Iter2 (b));
33- assert (base (r) == b + 3 );
34- assert (a[0 ] == 4 && a[1 ] == 5 && a[2 ] == 6 );
35- assert (b[0 ] == 1 && b[1 ] == 2 && b[2 ] == 3 );
36- }
37- };
38-
3926struct TestPtr {
4027 template <class Iter >
4128 TEST_CONSTEXPR_CXX20 void operator ()() {
42- types::for_each (types::forward_iterator_list<int *>(), Test1 <Iter>());
29+ types::for_each (types::forward_iterator_list<int *>(), TestPtrImpl <Iter>());
4330 }
44- };
4531
46- TEST_CONSTEXPR_CXX20 bool test_ptr () {
47- types::for_each (types::forward_iterator_list<int *>(), TestPtr ());
48- return true ;
49- }
50-
51- #if TEST_STD_VER >= 11
52- template <class Iter1 >
53- struct Test2 {
54- template <class Iter2 >
55- TEST_CONSTEXPR_CXX23 void operator ()() {
56- std::unique_ptr<int > a[3 ];
57- for (int k = 0 ; k < 3 ; ++k)
58- a[k].reset (new int (k + 1 ));
59- std::unique_ptr<int > b[3 ];
60- for (int k = 0 ; k < 3 ; ++k)
61- b[k].reset (new int (k + 4 ));
62- Iter2 r = std::swap_ranges (Iter1 (a), Iter1 (a + 3 ), Iter2 (b));
63- assert (base (r) == b + 3 );
64- assert (*a[0 ] == 4 && *a[1 ] == 5 && *a[2 ] == 6 );
65- assert (*b[0 ] == 1 && *b[1 ] == 2 && *b[2 ] == 3 );
66- }
32+ template <class Iter1 >
33+ struct TestPtrImpl {
34+ template <class Iter2 >
35+ TEST_CONSTEXPR_CXX20 void operator ()() {
36+ int a[] = {1 , 2 , 3 };
37+ int b[] = {4 , 5 , 6 };
38+ Iter2 r = std::swap_ranges (Iter1 (a), Iter1 (a + 3 ), Iter2 (b));
39+ assert (base (r) == b + 3 );
40+ assert (a[0 ] == 4 && a[1 ] == 5 && a[2 ] == 6 );
41+ assert (b[0 ] == 1 && b[1 ] == 2 && b[2 ] == 3 );
42+ }
43+ };
6744};
6845
69- struct TestUnqPtr {
46+ #if TEST_STD_VER >= 11
47+ struct TestUniquePtr {
7048 template <class Iter >
7149 TEST_CONSTEXPR_CXX20 void operator ()() {
72- types::for_each (types::forward_iterator_list<std::unique_ptr<int >*>(), Test2 <Iter>());
50+ types::for_each (types::forward_iterator_list<std::unique_ptr<int >*>(), TestUniquePtrImpl <Iter>());
7351 }
74- };
7552
76- TEST_CONSTEXPR_CXX23 bool test_unq_ptr () {
77- types::for_each (types::forward_iterator_list<std::unique_ptr<int >*>(), TestUnqPtr ());
78- return true ;
79- }
53+ template <class Iter1 >
54+ struct TestUniquePtrImpl {
55+ template <class Iter2 >
56+ TEST_CONSTEXPR_CXX23 void operator ()() {
57+ std::unique_ptr<int > a[3 ];
58+ for (int k = 0 ; k < 3 ; ++k)
59+ a[k].reset (new int (k + 1 ));
60+ std::unique_ptr<int > b[3 ];
61+ for (int k = 0 ; k < 3 ; ++k)
62+ b[k].reset (new int (k + 4 ));
63+ Iter2 r = std::swap_ranges (Iter1 (a), Iter1 (a + 3 ), Iter2 (b));
64+ assert (base (r) == b + 3 );
65+ assert (*a[0 ] == 4 && *a[1 ] == 5 && *a[2 ] == 6 );
66+ assert (*b[0 ] == 1 && *b[1 ] == 2 && *b[2 ] == 3 );
67+ }
68+ };
69+ };
8070#endif
8171
8272TEST_CONSTEXPR_CXX20 bool test_simple_cases () {
@@ -90,33 +80,35 @@ TEST_CONSTEXPR_CXX20 bool test_simple_cases() {
9080 {
9181 std::array<std::array<int , 2 >, 2 > a = {{{0 , 1 }, {2 , 3 }}}, a0 = a;
9282 std::array<std::array<int , 2 >, 2 > b = {{{9 , 8 }, {7 , 6 }}}, b0 = b;
93- std::swap (a, b );
83+ std::swap_ranges (a. begin (), a. end (), b. begin () );
9484 assert (a == b0);
9585 assert (b == a0);
9686 }
9787 {
9888 std::array<std::array<int , 3 >, 3 > a = {{{0 , 1 , 2 }, {3 , 4 , 5 }, {6 , 7 , 8 }}}, a0 = a;
9989 std::array<std::array<int , 3 >, 3 > b = {{{9 , 8 , 7 }, {6 , 5 , 4 }, {3 , 2 , 1 }}}, b0 = b;
100- std::swap (a, b );
90+ std::swap_ranges (a. begin (), a. end (), b. begin () );
10191 assert (a == b0);
10292 assert (b == a0);
10393 }
10494
10595 return true ;
10696}
10797
108- int main ( int , char ** ) {
98+ TEST_CONSTEXPR_CXX20 bool tests ( ) {
10999 test_simple_cases ();
110- test_ptr ( );
100+ types::for_each (types::forward_iterator_list< int *>(), TestPtr () );
111101#if TEST_STD_VER >= 11
112- test_unq_ptr ( );
102+ types::for_each (types::forward_iterator_list<std::unique_ptr< int >*>(), TestUniquePtr () );
113103#endif
104+ return true ;
105+ }
106+
107+ int main (int , char **) {
108+ tests ();
114109#if TEST_STD_VER >= 20
115- static_assert (test_simple_cases ());
116- static_assert (test_ptr ());
117- #endif
118- #if TEST_STD_VER >= 23
119- static_assert (test_unq_ptr ());
110+ static_assert (tests ());
120111#endif
112+
121113 return 0 ;
122114}
0 commit comments