|
15 | 15 |
|
16 | 16 | #include <algorithm>
|
17 | 17 | #include <cassert>
|
| 18 | +#include <vector> |
18 | 19 |
|
19 | 20 | #include "test_macros.h"
|
20 | 21 | #include "test_iterators.h"
|
21 | 22 | #include "user_defined_integral.h"
|
22 | 23 |
|
23 | 24 | #if TEST_STD_VER > 17
|
24 | 25 | TEST_CONSTEXPR bool test_constexpr() {
|
25 |
| - const std::size_t N = 5; |
26 |
| - int ib[] = {0, 0, 0, 0, 0, 0}; // one bigger than N |
27 |
| - |
28 |
| - auto it = std::fill_n(std::begin(ib), N, 5); |
29 |
| - return it == (std::begin(ib) + N) |
30 |
| - && std::all_of(std::begin(ib), it, [](int a) {return a == 5; }) |
31 |
| - && *it == 0 // don't overwrite the last value in the output array |
32 |
| - ; |
33 |
| - } |
| 26 | + const std::size_t N = 5; |
| 27 | + int ib[] = {0, 0, 0, 0, 0, 0}; // one bigger than N |
| 28 | + |
| 29 | + auto it = std::fill_n(std::begin(ib), N, 5); |
| 30 | + return it == (std::begin(ib) + N) && std::all_of(std::begin(ib), it, [](int a) { return a == 5; }) && |
| 31 | + *it == 0 // don't overwrite the last value in the output array |
| 32 | + ; |
| 33 | +} |
34 | 34 | #endif
|
35 | 35 |
|
36 | 36 | typedef UserDefinedIntegral<unsigned> UDI;
|
37 | 37 |
|
38 | 38 | template <class Iter>
|
39 |
| -void |
40 |
| -test_char() |
41 |
| -{ |
42 |
| - char a[4] = {}; |
43 |
| - Iter it = std::fill_n(Iter(a), UDI(4), char(1)); |
44 |
| - assert(base(it) == a + 4); |
45 |
| - assert(a[0] == 1); |
46 |
| - assert(a[1] == 1); |
47 |
| - assert(a[2] == 1); |
48 |
| - assert(a[3] == 1); |
| 39 | +void test_char() { |
| 40 | + char a[4] = {}; |
| 41 | + Iter it = std::fill_n(Iter(a), UDI(4), char(1)); |
| 42 | + assert(base(it) == a + 4); |
| 43 | + assert(a[0] == 1); |
| 44 | + assert(a[1] == 1); |
| 45 | + assert(a[2] == 1); |
| 46 | + assert(a[3] == 1); |
49 | 47 | }
|
50 | 48 |
|
51 | 49 | template <class Iter>
|
52 |
| -void |
53 |
| -test_int() |
54 |
| -{ |
55 |
| - int a[4] = {}; |
56 |
| - Iter it = std::fill_n(Iter(a), UDI(4), 1); |
57 |
| - assert(base(it) == a + 4); |
58 |
| - assert(a[0] == 1); |
59 |
| - assert(a[1] == 1); |
60 |
| - assert(a[2] == 1); |
61 |
| - assert(a[3] == 1); |
| 50 | +void test_int() { |
| 51 | + int a[4] = {}; |
| 52 | + Iter it = std::fill_n(Iter(a), UDI(4), 1); |
| 53 | + assert(base(it) == a + 4); |
| 54 | + assert(a[0] == 1); |
| 55 | + assert(a[1] == 1); |
| 56 | + assert(a[2] == 1); |
| 57 | + assert(a[3] == 1); |
62 | 58 | }
|
63 | 59 |
|
64 |
| -void |
65 |
| -test_int_array() |
66 |
| -{ |
67 |
| - int a[4] = {}; |
68 |
| - assert(std::fill_n(a, UDI(4), static_cast<char>(1)) == a + 4); |
69 |
| - assert(a[0] == 1); |
70 |
| - assert(a[1] == 1); |
71 |
| - assert(a[2] == 1); |
72 |
| - assert(a[3] == 1); |
| 60 | +void test_int_array() { |
| 61 | + int a[4] = {}; |
| 62 | + assert(std::fill_n(a, UDI(4), static_cast<char>(1)) == a + 4); |
| 63 | + assert(a[0] == 1); |
| 64 | + assert(a[1] == 1); |
| 65 | + assert(a[2] == 1); |
| 66 | + assert(a[3] == 1); |
73 | 67 | }
|
74 | 68 |
|
75 | 69 | struct source {
|
76 |
| - source() : i(0) { } |
| 70 | + source() : i(0) {} |
77 | 71 |
|
78 |
| - operator int() const { return i++; } |
79 |
| - mutable int i; |
| 72 | + operator int() const { return i++; } |
| 73 | + mutable int i; |
80 | 74 | };
|
81 | 75 |
|
82 |
| -void |
83 |
| -test_int_array_struct_source() |
84 |
| -{ |
85 |
| - int a[4] = {}; |
86 |
| - assert(std::fill_n(a, UDI(4), source()) == a + 4); |
87 |
| - assert(a[0] == 0); |
88 |
| - assert(a[1] == 1); |
89 |
| - assert(a[2] == 2); |
90 |
| - assert(a[3] == 3); |
| 76 | +void test_int_array_struct_source() { |
| 77 | + int a[4] = {}; |
| 78 | + assert(std::fill_n(a, UDI(4), source()) == a + 4); |
| 79 | + assert(a[0] == 0); |
| 80 | + assert(a[1] == 1); |
| 81 | + assert(a[2] == 2); |
| 82 | + assert(a[3] == 3); |
91 | 83 | }
|
92 | 84 |
|
93 | 85 | struct test1 {
|
94 |
| - test1() : c(0) { } |
95 |
| - test1(char xc) : c(xc + 1) { } |
96 |
| - char c; |
| 86 | + test1() : c(0) {} |
| 87 | + test1(char xc) : c(xc + 1) {} |
| 88 | + char c; |
97 | 89 | };
|
98 | 90 |
|
99 |
| -void |
100 |
| -test_struct_array() |
101 |
| -{ |
102 |
| - test1 test1a[4] = {}; |
103 |
| - assert(std::fill_n(test1a, UDI(4), static_cast<char>(10)) == test1a + 4); |
104 |
| - assert(test1a[0].c == 11); |
105 |
| - assert(test1a[1].c == 11); |
106 |
| - assert(test1a[2].c == 11); |
107 |
| - assert(test1a[3].c == 11); |
| 91 | +void test_struct_array() { |
| 92 | + test1 test1a[4] = {}; |
| 93 | + assert(std::fill_n(test1a, UDI(4), static_cast<char>(10)) == test1a + 4); |
| 94 | + assert(test1a[0].c == 11); |
| 95 | + assert(test1a[1].c == 11); |
| 96 | + assert(test1a[2].c == 11); |
| 97 | + assert(test1a[3].c == 11); |
108 | 98 | }
|
109 | 99 |
|
110 |
| -class A |
111 |
| -{ |
112 |
| - char a_; |
| 100 | +class A { |
| 101 | + char a_; |
| 102 | + |
113 | 103 | public:
|
114 |
| - A() {} |
115 |
| - explicit A(char a) : a_(a) {} |
116 |
| - operator unsigned char() const {return 'b';} |
| 104 | + A() {} |
| 105 | + explicit A(char a) : a_(a) {} |
| 106 | + operator unsigned char() const { return 'b'; } |
117 | 107 |
|
118 |
| - friend bool operator==(const A& x, const A& y) |
119 |
| - {return x.a_ == y.a_;} |
| 108 | + friend bool operator==(const A& x, const A& y) { return x.a_ == y.a_; } |
120 | 109 | };
|
121 | 110 |
|
122 |
| -void |
123 |
| -test5() |
124 |
| -{ |
125 |
| - A a[3]; |
126 |
| - assert(std::fill_n(&a[0], UDI(3), A('a')) == a+3); |
127 |
| - assert(a[0] == A('a')); |
128 |
| - assert(a[1] == A('a')); |
129 |
| - assert(a[2] == A('a')); |
| 111 | +void test5() { |
| 112 | + A a[3]; |
| 113 | + assert(std::fill_n(&a[0], UDI(3), A('a')) == a + 3); |
| 114 | + assert(a[0] == A('a')); |
| 115 | + assert(a[1] == A('a')); |
| 116 | + assert(a[2] == A('a')); |
130 | 117 | }
|
131 | 118 |
|
132 |
| -struct Storage |
133 |
| -{ |
134 |
| - union |
135 |
| - { |
| 119 | +struct Storage { |
| 120 | + union { |
136 | 121 | unsigned char a;
|
137 | 122 | unsigned char b;
|
138 | 123 | };
|
139 | 124 | };
|
140 | 125 |
|
141 |
| -void test6() |
142 |
| -{ |
| 126 | +void test6() { |
143 | 127 | Storage foo[5];
|
144 | 128 | std::fill_n(&foo[0], UDI(5), Storage());
|
145 | 129 | }
|
146 | 130 |
|
147 |
| - |
148 |
| -int main(int, char**) |
149 |
| -{ |
150 |
| - test_char<cpp17_output_iterator<char*> >(); |
151 |
| - test_char<forward_iterator<char*> >(); |
152 |
| - test_char<bidirectional_iterator<char*> >(); |
153 |
| - test_char<random_access_iterator<char*> >(); |
154 |
| - test_char<char*>(); |
155 |
| - |
156 |
| - test_int<cpp17_output_iterator<int*> >(); |
157 |
| - test_int<forward_iterator<int*> >(); |
158 |
| - test_int<bidirectional_iterator<int*> >(); |
159 |
| - test_int<random_access_iterator<int*> >(); |
160 |
| - test_int<int*>(); |
161 |
| - |
162 |
| - test_int_array(); |
163 |
| - test_int_array_struct_source(); |
164 |
| - test_struct_array(); |
165 |
| - |
166 |
| - test5(); |
167 |
| - test6(); |
| 131 | +int main(int, char**) { |
| 132 | + test_char<cpp17_output_iterator<char*> >(); |
| 133 | + test_char<forward_iterator<char*> >(); |
| 134 | + test_char<bidirectional_iterator<char*> >(); |
| 135 | + test_char<random_access_iterator<char*> >(); |
| 136 | + test_char<char*>(); |
| 137 | + |
| 138 | + test_int<cpp17_output_iterator<int*> >(); |
| 139 | + test_int<forward_iterator<int*> >(); |
| 140 | + test_int<bidirectional_iterator<int*> >(); |
| 141 | + test_int<random_access_iterator<int*> >(); |
| 142 | + test_int<int*>(); |
| 143 | + |
| 144 | + test_int_array(); |
| 145 | + test_int_array_struct_source(); |
| 146 | + test_struct_array(); |
| 147 | + |
| 148 | + test5(); |
| 149 | + test6(); |
| 150 | + |
| 151 | + { // Test vector<bool>::iterator optimization |
| 152 | + for (std::size_t N = 8; N <= 256; N *= 2) { |
| 153 | + // Test with both full and partial bytes |
| 154 | + for (std::size_t offset = 0; offset <= 4; offset += 4) { |
| 155 | + std::vector<bool> in(N + 2 * offset); |
| 156 | + std::vector<bool> expected(N, true); |
| 157 | + std::fill_n(in.begin() + offset, N + offset, true); |
| 158 | + assert(std::equal(in.begin() + offset, in.end() - offset, expected.begin())); |
| 159 | + } |
| 160 | + } |
| 161 | + } |
168 | 162 |
|
169 | 163 | #if TEST_STD_VER > 17
|
170 |
| - static_assert(test_constexpr()); |
| 164 | + static_assert(test_constexpr()); |
171 | 165 | #endif
|
172 | 166 |
|
173 | 167 | return 0;
|
|
0 commit comments