23
23
#include " test_iterators.h"
24
24
#include " type_algorithms.h"
25
25
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
-
39
26
struct TestPtr {
40
27
template <class Iter >
41
28
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>());
43
30
}
44
- };
45
31
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
+ };
67
44
};
68
45
69
- struct TestUnqPtr {
46
+ #if TEST_STD_VER >= 11
47
+ struct TestUniquePtr {
70
48
template <class Iter >
71
49
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>());
73
51
}
74
- };
75
52
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
+ };
80
70
#endif
81
71
82
72
TEST_CONSTEXPR_CXX20 bool test_simple_cases () {
@@ -90,33 +80,35 @@ TEST_CONSTEXPR_CXX20 bool test_simple_cases() {
90
80
{
91
81
std::array<std::array<int , 2 >, 2 > a = {{{0 , 1 }, {2 , 3 }}}, a0 = a;
92
82
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 () );
94
84
assert (a == b0);
95
85
assert (b == a0);
96
86
}
97
87
{
98
88
std::array<std::array<int , 3 >, 3 > a = {{{0 , 1 , 2 }, {3 , 4 , 5 }, {6 , 7 , 8 }}}, a0 = a;
99
89
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 () );
101
91
assert (a == b0);
102
92
assert (b == a0);
103
93
}
104
94
105
95
return true ;
106
96
}
107
97
108
- int main ( int , char ** ) {
98
+ TEST_CONSTEXPR_CXX20 bool tests ( ) {
109
99
test_simple_cases ();
110
- test_ptr ( );
100
+ types::for_each (types::forward_iterator_list< int *>(), TestPtr () );
111
101
#if TEST_STD_VER >= 11
112
- test_unq_ptr ( );
102
+ types::for_each (types::forward_iterator_list<std::unique_ptr< int >*>(), TestUniquePtr () );
113
103
#endif
104
+ return true ;
105
+ }
106
+
107
+ int main (int , char **) {
108
+ tests ();
114
109
#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 ());
120
111
#endif
112
+
121
113
return 0 ;
122
114
}
0 commit comments