]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /*============================================================================= |
2 | Copyright (c) 2006, 2007 Matthew Calabrese | |
3 | ||
4 | Use, modification and distribution is subject to the Boost Software | |
5 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
6 | http://www.boost.org/LICENSE_1_0.txt) | |
7 | ==============================================================================*/ | |
8 | ||
11fdf7f2 | 9 | #include <boost/core/lightweight_test.hpp> |
7c673cae FG |
10 | #include <boost/utility/binary.hpp> |
11 | #include <algorithm> | |
12 | #include <cstddef> | |
13 | ||
14 | #ifdef BOOST_MSVC | |
15 | #pragma warning(disable:4996) // warning C4996: 'std::equal': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators' | |
16 | #endif | |
17 | ||
18 | /* | |
19 | Note: This file tests every single valid bit-grouping on its own, and some | |
20 | random combinations of bit-groupings. | |
21 | */ | |
22 | ||
23 | std::size_t const num_random_test_values = 32; | |
24 | ||
25 | // Note: These hex values should all correspond with the binary array below | |
26 | unsigned int const random_unsigned_ints_hex[num_random_test_values] | |
27 | = { 0x0103u, 0x77ebu, 0x5f36u, 0x1f18u, 0xc530u, 0xa73au, 0xd6f8u, 0x0919u | |
28 | , 0xfbb0u, 0x3e7cu, 0xd0e9u, 0x22c8u, 0x724eu, 0x14fau, 0xd98eu, 0x40b5 | |
29 | , 0xeba0u, 0xfe50u, 0x688au, 0x1b05u, 0x5f9cu, 0xe4fcu, 0xa7b8u, 0xd3acu | |
30 | , 0x1dddu, 0xbf04u, 0x8352u, 0xe89cu, 0x7506u, 0xe767u, 0xf489u, 0xe167 | |
31 | }; | |
32 | ||
33 | unsigned int const random_unsigned_ints_binary[num_random_test_values] | |
34 | = { BOOST_BINARY( 0 00010000 0011 ), BOOST_BINARY( 0 11101 1111 101011 ) | |
35 | , BOOST_BINARY( 010111 1100110 1 1 0 ), BOOST_BINARY( 000 1 11110 00 11000 ) | |
36 | , BOOST_BINARY( 110 001010 0110 000 ), BOOST_BINARY( 1010 01110011 1010 ) | |
37 | , BOOST_BINARY( 11 010 1 101111 1000 ), BOOST_BINARY( 0000 100100 0110 01 ) | |
38 | , BOOST_BINARY( 1111 101110 11 0000 ), BOOST_BINARY( 00111110 01111100 ) | |
39 | , BOOST_BINARY( 11 010 000111 01001 ), BOOST_BINARY( 00100 010110 01000 ) | |
40 | , BOOST_BINARY( 01 11001001 001110 ), BOOST_BINARY( 0010 1001111 1010 ) | |
41 | , BOOST_BINARY( 1101 1 00110 0 01110 ), BOOST_BINARY( 100 000 01011010 1 ) | |
42 | , BOOST_BINARY( 11 1010 1110 1000 00 ), BOOST_BINARY( 11111 110010 10000 ) | |
43 | , BOOST_BINARY( 01101 00010 001010 ), BOOST_BINARY( 000 11011 000001 01 ) | |
44 | , BOOST_BINARY( 01 01111 1100111 00 ), BOOST_BINARY( 1 110010 0111111 00 ) | |
45 | , BOOST_BINARY( 101 0011 11 01110 00 ), BOOST_BINARY( 110100 1 110101 100 ) | |
46 | , BOOST_BINARY( 00 1110111 011 101 ), BOOST_BINARY( 1011 1111 00000 100 ) | |
47 | , BOOST_BINARY( 1000 00110 101 0010 ), BOOST_BINARY( 1110 10001 001110 0 ) | |
48 | , BOOST_BINARY( 011 1010100 000 110 ), BOOST_BINARY( 1110 0111 01100 111 ) | |
49 | , BOOST_BINARY( 11110 10010 001001 ), BOOST_BINARY( 11 1000010 1100 111 ) | |
50 | }; | |
51 | ||
52 | unsigned int const unsigned_ints_1_bit[2] = | |
53 | { BOOST_BINARY( 0 ) | |
54 | , BOOST_BINARY( 1 ) | |
55 | }; | |
56 | ||
57 | unsigned int const unsigned_ints_2_bits[4] = | |
58 | { BOOST_BINARY( 00 ) | |
59 | , BOOST_BINARY( 01 ) | |
60 | , BOOST_BINARY( 10 ) | |
61 | , BOOST_BINARY( 11 ) | |
62 | }; | |
63 | ||
64 | unsigned int const unsigned_ints_3_bits[8] = | |
65 | { BOOST_BINARY( 000 ) | |
66 | , BOOST_BINARY( 001 ) | |
67 | , BOOST_BINARY( 010 ) | |
68 | , BOOST_BINARY( 011 ) | |
69 | , BOOST_BINARY( 100 ) | |
70 | , BOOST_BINARY( 101 ) | |
71 | , BOOST_BINARY( 110 ) | |
72 | , BOOST_BINARY( 111 ) | |
73 | }; | |
74 | ||
75 | unsigned int const unsigned_ints_4_bits[16] = | |
76 | { BOOST_BINARY( 0000 ) | |
77 | , BOOST_BINARY( 0001 ) | |
78 | , BOOST_BINARY( 0010 ) | |
79 | , BOOST_BINARY( 0011 ) | |
80 | , BOOST_BINARY( 0100 ) | |
81 | , BOOST_BINARY( 0101 ) | |
82 | , BOOST_BINARY( 0110 ) | |
83 | , BOOST_BINARY( 0111 ) | |
84 | , BOOST_BINARY( 1000 ) | |
85 | , BOOST_BINARY( 1001 ) | |
86 | , BOOST_BINARY( 1010 ) | |
87 | , BOOST_BINARY( 1011 ) | |
88 | , BOOST_BINARY( 1100 ) | |
89 | , BOOST_BINARY( 1101 ) | |
90 | , BOOST_BINARY( 1110 ) | |
91 | , BOOST_BINARY( 1111 ) | |
92 | }; | |
93 | ||
94 | unsigned int const unsigned_ints_5_bits[32] = | |
95 | { BOOST_BINARY( 00000 ) | |
96 | , BOOST_BINARY( 00001 ) | |
97 | , BOOST_BINARY( 00010 ) | |
98 | , BOOST_BINARY( 00011 ) | |
99 | , BOOST_BINARY( 00100 ) | |
100 | , BOOST_BINARY( 00101 ) | |
101 | , BOOST_BINARY( 00110 ) | |
102 | , BOOST_BINARY( 00111 ) | |
103 | , BOOST_BINARY( 01000 ) | |
104 | , BOOST_BINARY( 01001 ) | |
105 | , BOOST_BINARY( 01010 ) | |
106 | , BOOST_BINARY( 01011 ) | |
107 | , BOOST_BINARY( 01100 ) | |
108 | , BOOST_BINARY( 01101 ) | |
109 | , BOOST_BINARY( 01110 ) | |
110 | , BOOST_BINARY( 01111 ) | |
111 | , BOOST_BINARY( 10000 ) | |
112 | , BOOST_BINARY( 10001 ) | |
113 | , BOOST_BINARY( 10010 ) | |
114 | , BOOST_BINARY( 10011 ) | |
115 | , BOOST_BINARY( 10100 ) | |
116 | , BOOST_BINARY( 10101 ) | |
117 | , BOOST_BINARY( 10110 ) | |
118 | , BOOST_BINARY( 10111 ) | |
119 | , BOOST_BINARY( 11000 ) | |
120 | , BOOST_BINARY( 11001 ) | |
121 | , BOOST_BINARY( 11010 ) | |
122 | , BOOST_BINARY( 11011 ) | |
123 | , BOOST_BINARY( 11100 ) | |
124 | , BOOST_BINARY( 11101 ) | |
125 | , BOOST_BINARY( 11110 ) | |
126 | , BOOST_BINARY( 11111 ) | |
127 | }; | |
128 | ||
129 | unsigned int const unsigned_ints_6_bits[64] = | |
130 | { BOOST_BINARY( 000000 ) | |
131 | , BOOST_BINARY( 000001 ) | |
132 | , BOOST_BINARY( 000010 ) | |
133 | , BOOST_BINARY( 000011 ) | |
134 | , BOOST_BINARY( 000100 ) | |
135 | , BOOST_BINARY( 000101 ) | |
136 | , BOOST_BINARY( 000110 ) | |
137 | , BOOST_BINARY( 000111 ) | |
138 | , BOOST_BINARY( 001000 ) | |
139 | , BOOST_BINARY( 001001 ) | |
140 | , BOOST_BINARY( 001010 ) | |
141 | , BOOST_BINARY( 001011 ) | |
142 | , BOOST_BINARY( 001100 ) | |
143 | , BOOST_BINARY( 001101 ) | |
144 | , BOOST_BINARY( 001110 ) | |
145 | , BOOST_BINARY( 001111 ) | |
146 | , BOOST_BINARY( 010000 ) | |
147 | , BOOST_BINARY( 010001 ) | |
148 | , BOOST_BINARY( 010010 ) | |
149 | , BOOST_BINARY( 010011 ) | |
150 | , BOOST_BINARY( 010100 ) | |
151 | , BOOST_BINARY( 010101 ) | |
152 | , BOOST_BINARY( 010110 ) | |
153 | , BOOST_BINARY( 010111 ) | |
154 | , BOOST_BINARY( 011000 ) | |
155 | , BOOST_BINARY( 011001 ) | |
156 | , BOOST_BINARY( 011010 ) | |
157 | , BOOST_BINARY( 011011 ) | |
158 | , BOOST_BINARY( 011100 ) | |
159 | , BOOST_BINARY( 011101 ) | |
160 | , BOOST_BINARY( 011110 ) | |
161 | , BOOST_BINARY( 011111 ) | |
162 | , BOOST_BINARY( 100000 ) | |
163 | , BOOST_BINARY( 100001 ) | |
164 | , BOOST_BINARY( 100010 ) | |
165 | , BOOST_BINARY( 100011 ) | |
166 | , BOOST_BINARY( 100100 ) | |
167 | , BOOST_BINARY( 100101 ) | |
168 | , BOOST_BINARY( 100110 ) | |
169 | , BOOST_BINARY( 100111 ) | |
170 | , BOOST_BINARY( 101000 ) | |
171 | , BOOST_BINARY( 101001 ) | |
172 | , BOOST_BINARY( 101010 ) | |
173 | , BOOST_BINARY( 101011 ) | |
174 | , BOOST_BINARY( 101100 ) | |
175 | , BOOST_BINARY( 101101 ) | |
176 | , BOOST_BINARY( 101110 ) | |
177 | , BOOST_BINARY( 101111 ) | |
178 | , BOOST_BINARY( 110000 ) | |
179 | , BOOST_BINARY( 110001 ) | |
180 | , BOOST_BINARY( 110010 ) | |
181 | , BOOST_BINARY( 110011 ) | |
182 | , BOOST_BINARY( 110100 ) | |
183 | , BOOST_BINARY( 110101 ) | |
184 | , BOOST_BINARY( 110110 ) | |
185 | , BOOST_BINARY( 110111 ) | |
186 | , BOOST_BINARY( 111000 ) | |
187 | , BOOST_BINARY( 111001 ) | |
188 | , BOOST_BINARY( 111010 ) | |
189 | , BOOST_BINARY( 111011 ) | |
190 | , BOOST_BINARY( 111100 ) | |
191 | , BOOST_BINARY( 111101 ) | |
192 | , BOOST_BINARY( 111110 ) | |
193 | , BOOST_BINARY( 111111 ) | |
194 | }; | |
195 | ||
196 | unsigned int const unsigned_ints_7_bits[128] = | |
197 | { BOOST_BINARY( 0000000 ) | |
198 | , BOOST_BINARY( 0000001 ) | |
199 | , BOOST_BINARY( 0000010 ) | |
200 | , BOOST_BINARY( 0000011 ) | |
201 | , BOOST_BINARY( 0000100 ) | |
202 | , BOOST_BINARY( 0000101 ) | |
203 | , BOOST_BINARY( 0000110 ) | |
204 | , BOOST_BINARY( 0000111 ) | |
205 | , BOOST_BINARY( 0001000 ) | |
206 | , BOOST_BINARY( 0001001 ) | |
207 | , BOOST_BINARY( 0001010 ) | |
208 | , BOOST_BINARY( 0001011 ) | |
209 | , BOOST_BINARY( 0001100 ) | |
210 | , BOOST_BINARY( 0001101 ) | |
211 | , BOOST_BINARY( 0001110 ) | |
212 | , BOOST_BINARY( 0001111 ) | |
213 | , BOOST_BINARY( 0010000 ) | |
214 | , BOOST_BINARY( 0010001 ) | |
215 | , BOOST_BINARY( 0010010 ) | |
216 | , BOOST_BINARY( 0010011 ) | |
217 | , BOOST_BINARY( 0010100 ) | |
218 | , BOOST_BINARY( 0010101 ) | |
219 | , BOOST_BINARY( 0010110 ) | |
220 | , BOOST_BINARY( 0010111 ) | |
221 | , BOOST_BINARY( 0011000 ) | |
222 | , BOOST_BINARY( 0011001 ) | |
223 | , BOOST_BINARY( 0011010 ) | |
224 | , BOOST_BINARY( 0011011 ) | |
225 | , BOOST_BINARY( 0011100 ) | |
226 | , BOOST_BINARY( 0011101 ) | |
227 | , BOOST_BINARY( 0011110 ) | |
228 | , BOOST_BINARY( 0011111 ) | |
229 | , BOOST_BINARY( 0100000 ) | |
230 | , BOOST_BINARY( 0100001 ) | |
231 | , BOOST_BINARY( 0100010 ) | |
232 | , BOOST_BINARY( 0100011 ) | |
233 | , BOOST_BINARY( 0100100 ) | |
234 | , BOOST_BINARY( 0100101 ) | |
235 | , BOOST_BINARY( 0100110 ) | |
236 | , BOOST_BINARY( 0100111 ) | |
237 | , BOOST_BINARY( 0101000 ) | |
238 | , BOOST_BINARY( 0101001 ) | |
239 | , BOOST_BINARY( 0101010 ) | |
240 | , BOOST_BINARY( 0101011 ) | |
241 | , BOOST_BINARY( 0101100 ) | |
242 | , BOOST_BINARY( 0101101 ) | |
243 | , BOOST_BINARY( 0101110 ) | |
244 | , BOOST_BINARY( 0101111 ) | |
245 | , BOOST_BINARY( 0110000 ) | |
246 | , BOOST_BINARY( 0110001 ) | |
247 | , BOOST_BINARY( 0110010 ) | |
248 | , BOOST_BINARY( 0110011 ) | |
249 | , BOOST_BINARY( 0110100 ) | |
250 | , BOOST_BINARY( 0110101 ) | |
251 | , BOOST_BINARY( 0110110 ) | |
252 | , BOOST_BINARY( 0110111 ) | |
253 | , BOOST_BINARY( 0111000 ) | |
254 | , BOOST_BINARY( 0111001 ) | |
255 | , BOOST_BINARY( 0111010 ) | |
256 | , BOOST_BINARY( 0111011 ) | |
257 | , BOOST_BINARY( 0111100 ) | |
258 | , BOOST_BINARY( 0111101 ) | |
259 | , BOOST_BINARY( 0111110 ) | |
260 | , BOOST_BINARY( 0111111 ) | |
261 | , BOOST_BINARY( 1000000 ) | |
262 | , BOOST_BINARY( 1000001 ) | |
263 | , BOOST_BINARY( 1000010 ) | |
264 | , BOOST_BINARY( 1000011 ) | |
265 | , BOOST_BINARY( 1000100 ) | |
266 | , BOOST_BINARY( 1000101 ) | |
267 | , BOOST_BINARY( 1000110 ) | |
268 | , BOOST_BINARY( 1000111 ) | |
269 | , BOOST_BINARY( 1001000 ) | |
270 | , BOOST_BINARY( 1001001 ) | |
271 | , BOOST_BINARY( 1001010 ) | |
272 | , BOOST_BINARY( 1001011 ) | |
273 | , BOOST_BINARY( 1001100 ) | |
274 | , BOOST_BINARY( 1001101 ) | |
275 | , BOOST_BINARY( 1001110 ) | |
276 | , BOOST_BINARY( 1001111 ) | |
277 | , BOOST_BINARY( 1010000 ) | |
278 | , BOOST_BINARY( 1010001 ) | |
279 | , BOOST_BINARY( 1010010 ) | |
280 | , BOOST_BINARY( 1010011 ) | |
281 | , BOOST_BINARY( 1010100 ) | |
282 | , BOOST_BINARY( 1010101 ) | |
283 | , BOOST_BINARY( 1010110 ) | |
284 | , BOOST_BINARY( 1010111 ) | |
285 | , BOOST_BINARY( 1011000 ) | |
286 | , BOOST_BINARY( 1011001 ) | |
287 | , BOOST_BINARY( 1011010 ) | |
288 | , BOOST_BINARY( 1011011 ) | |
289 | , BOOST_BINARY( 1011100 ) | |
290 | , BOOST_BINARY( 1011101 ) | |
291 | , BOOST_BINARY( 1011110 ) | |
292 | , BOOST_BINARY( 1011111 ) | |
293 | , BOOST_BINARY( 1100000 ) | |
294 | , BOOST_BINARY( 1100001 ) | |
295 | , BOOST_BINARY( 1100010 ) | |
296 | , BOOST_BINARY( 1100011 ) | |
297 | , BOOST_BINARY( 1100100 ) | |
298 | , BOOST_BINARY( 1100101 ) | |
299 | , BOOST_BINARY( 1100110 ) | |
300 | , BOOST_BINARY( 1100111 ) | |
301 | , BOOST_BINARY( 1101000 ) | |
302 | , BOOST_BINARY( 1101001 ) | |
303 | , BOOST_BINARY( 1101010 ) | |
304 | , BOOST_BINARY( 1101011 ) | |
305 | , BOOST_BINARY( 1101100 ) | |
306 | , BOOST_BINARY( 1101101 ) | |
307 | , BOOST_BINARY( 1101110 ) | |
308 | , BOOST_BINARY( 1101111 ) | |
309 | , BOOST_BINARY( 1110000 ) | |
310 | , BOOST_BINARY( 1110001 ) | |
311 | , BOOST_BINARY( 1110010 ) | |
312 | , BOOST_BINARY( 1110011 ) | |
313 | , BOOST_BINARY( 1110100 ) | |
314 | , BOOST_BINARY( 1110101 ) | |
315 | , BOOST_BINARY( 1110110 ) | |
316 | , BOOST_BINARY( 1110111 ) | |
317 | , BOOST_BINARY( 1111000 ) | |
318 | , BOOST_BINARY( 1111001 ) | |
319 | , BOOST_BINARY( 1111010 ) | |
320 | , BOOST_BINARY( 1111011 ) | |
321 | , BOOST_BINARY( 1111100 ) | |
322 | , BOOST_BINARY( 1111101 ) | |
323 | , BOOST_BINARY( 1111110 ) | |
324 | , BOOST_BINARY( 1111111 ) | |
325 | }; | |
326 | unsigned int const unsigned_ints_8_bits[256] = | |
327 | { BOOST_BINARY( 00000000 ) | |
328 | , BOOST_BINARY( 00000001 ) | |
329 | , BOOST_BINARY( 00000010 ) | |
330 | , BOOST_BINARY( 00000011 ) | |
331 | , BOOST_BINARY( 00000100 ) | |
332 | , BOOST_BINARY( 00000101 ) | |
333 | , BOOST_BINARY( 00000110 ) | |
334 | , BOOST_BINARY( 00000111 ) | |
335 | , BOOST_BINARY( 00001000 ) | |
336 | , BOOST_BINARY( 00001001 ) | |
337 | , BOOST_BINARY( 00001010 ) | |
338 | , BOOST_BINARY( 00001011 ) | |
339 | , BOOST_BINARY( 00001100 ) | |
340 | , BOOST_BINARY( 00001101 ) | |
341 | , BOOST_BINARY( 00001110 ) | |
342 | , BOOST_BINARY( 00001111 ) | |
343 | , BOOST_BINARY( 00010000 ) | |
344 | , BOOST_BINARY( 00010001 ) | |
345 | , BOOST_BINARY( 00010010 ) | |
346 | , BOOST_BINARY( 00010011 ) | |
347 | , BOOST_BINARY( 00010100 ) | |
348 | , BOOST_BINARY( 00010101 ) | |
349 | , BOOST_BINARY( 00010110 ) | |
350 | , BOOST_BINARY( 00010111 ) | |
351 | , BOOST_BINARY( 00011000 ) | |
352 | , BOOST_BINARY( 00011001 ) | |
353 | , BOOST_BINARY( 00011010 ) | |
354 | , BOOST_BINARY( 00011011 ) | |
355 | , BOOST_BINARY( 00011100 ) | |
356 | , BOOST_BINARY( 00011101 ) | |
357 | , BOOST_BINARY( 00011110 ) | |
358 | , BOOST_BINARY( 00011111 ) | |
359 | , BOOST_BINARY( 00100000 ) | |
360 | , BOOST_BINARY( 00100001 ) | |
361 | , BOOST_BINARY( 00100010 ) | |
362 | , BOOST_BINARY( 00100011 ) | |
363 | , BOOST_BINARY( 00100100 ) | |
364 | , BOOST_BINARY( 00100101 ) | |
365 | , BOOST_BINARY( 00100110 ) | |
366 | , BOOST_BINARY( 00100111 ) | |
367 | , BOOST_BINARY( 00101000 ) | |
368 | , BOOST_BINARY( 00101001 ) | |
369 | , BOOST_BINARY( 00101010 ) | |
370 | , BOOST_BINARY( 00101011 ) | |
371 | , BOOST_BINARY( 00101100 ) | |
372 | , BOOST_BINARY( 00101101 ) | |
373 | , BOOST_BINARY( 00101110 ) | |
374 | , BOOST_BINARY( 00101111 ) | |
375 | , BOOST_BINARY( 00110000 ) | |
376 | , BOOST_BINARY( 00110001 ) | |
377 | , BOOST_BINARY( 00110010 ) | |
378 | , BOOST_BINARY( 00110011 ) | |
379 | , BOOST_BINARY( 00110100 ) | |
380 | , BOOST_BINARY( 00110101 ) | |
381 | , BOOST_BINARY( 00110110 ) | |
382 | , BOOST_BINARY( 00110111 ) | |
383 | , BOOST_BINARY( 00111000 ) | |
384 | , BOOST_BINARY( 00111001 ) | |
385 | , BOOST_BINARY( 00111010 ) | |
386 | , BOOST_BINARY( 00111011 ) | |
387 | , BOOST_BINARY( 00111100 ) | |
388 | , BOOST_BINARY( 00111101 ) | |
389 | , BOOST_BINARY( 00111110 ) | |
390 | , BOOST_BINARY( 00111111 ) | |
391 | , BOOST_BINARY( 01000000 ) | |
392 | , BOOST_BINARY( 01000001 ) | |
393 | , BOOST_BINARY( 01000010 ) | |
394 | , BOOST_BINARY( 01000011 ) | |
395 | , BOOST_BINARY( 01000100 ) | |
396 | , BOOST_BINARY( 01000101 ) | |
397 | , BOOST_BINARY( 01000110 ) | |
398 | , BOOST_BINARY( 01000111 ) | |
399 | , BOOST_BINARY( 01001000 ) | |
400 | , BOOST_BINARY( 01001001 ) | |
401 | , BOOST_BINARY( 01001010 ) | |
402 | , BOOST_BINARY( 01001011 ) | |
403 | , BOOST_BINARY( 01001100 ) | |
404 | , BOOST_BINARY( 01001101 ) | |
405 | , BOOST_BINARY( 01001110 ) | |
406 | , BOOST_BINARY( 01001111 ) | |
407 | , BOOST_BINARY( 01010000 ) | |
408 | , BOOST_BINARY( 01010001 ) | |
409 | , BOOST_BINARY( 01010010 ) | |
410 | , BOOST_BINARY( 01010011 ) | |
411 | , BOOST_BINARY( 01010100 ) | |
412 | , BOOST_BINARY( 01010101 ) | |
413 | , BOOST_BINARY( 01010110 ) | |
414 | , BOOST_BINARY( 01010111 ) | |
415 | , BOOST_BINARY( 01011000 ) | |
416 | , BOOST_BINARY( 01011001 ) | |
417 | , BOOST_BINARY( 01011010 ) | |
418 | , BOOST_BINARY( 01011011 ) | |
419 | , BOOST_BINARY( 01011100 ) | |
420 | , BOOST_BINARY( 01011101 ) | |
421 | , BOOST_BINARY( 01011110 ) | |
422 | , BOOST_BINARY( 01011111 ) | |
423 | , BOOST_BINARY( 01100000 ) | |
424 | , BOOST_BINARY( 01100001 ) | |
425 | , BOOST_BINARY( 01100010 ) | |
426 | , BOOST_BINARY( 01100011 ) | |
427 | , BOOST_BINARY( 01100100 ) | |
428 | , BOOST_BINARY( 01100101 ) | |
429 | , BOOST_BINARY( 01100110 ) | |
430 | , BOOST_BINARY( 01100111 ) | |
431 | , BOOST_BINARY( 01101000 ) | |
432 | , BOOST_BINARY( 01101001 ) | |
433 | , BOOST_BINARY( 01101010 ) | |
434 | , BOOST_BINARY( 01101011 ) | |
435 | , BOOST_BINARY( 01101100 ) | |
436 | , BOOST_BINARY( 01101101 ) | |
437 | , BOOST_BINARY( 01101110 ) | |
438 | , BOOST_BINARY( 01101111 ) | |
439 | , BOOST_BINARY( 01110000 ) | |
440 | , BOOST_BINARY( 01110001 ) | |
441 | , BOOST_BINARY( 01110010 ) | |
442 | , BOOST_BINARY( 01110011 ) | |
443 | , BOOST_BINARY( 01110100 ) | |
444 | , BOOST_BINARY( 01110101 ) | |
445 | , BOOST_BINARY( 01110110 ) | |
446 | , BOOST_BINARY( 01110111 ) | |
447 | , BOOST_BINARY( 01111000 ) | |
448 | , BOOST_BINARY( 01111001 ) | |
449 | , BOOST_BINARY( 01111010 ) | |
450 | , BOOST_BINARY( 01111011 ) | |
451 | , BOOST_BINARY( 01111100 ) | |
452 | , BOOST_BINARY( 01111101 ) | |
453 | , BOOST_BINARY( 01111110 ) | |
454 | , BOOST_BINARY( 01111111 ) | |
455 | , BOOST_BINARY( 10000000 ) | |
456 | , BOOST_BINARY( 10000001 ) | |
457 | , BOOST_BINARY( 10000010 ) | |
458 | , BOOST_BINARY( 10000011 ) | |
459 | , BOOST_BINARY( 10000100 ) | |
460 | , BOOST_BINARY( 10000101 ) | |
461 | , BOOST_BINARY( 10000110 ) | |
462 | , BOOST_BINARY( 10000111 ) | |
463 | , BOOST_BINARY( 10001000 ) | |
464 | , BOOST_BINARY( 10001001 ) | |
465 | , BOOST_BINARY( 10001010 ) | |
466 | , BOOST_BINARY( 10001011 ) | |
467 | , BOOST_BINARY( 10001100 ) | |
468 | , BOOST_BINARY( 10001101 ) | |
469 | , BOOST_BINARY( 10001110 ) | |
470 | , BOOST_BINARY( 10001111 ) | |
471 | , BOOST_BINARY( 10010000 ) | |
472 | , BOOST_BINARY( 10010001 ) | |
473 | , BOOST_BINARY( 10010010 ) | |
474 | , BOOST_BINARY( 10010011 ) | |
475 | , BOOST_BINARY( 10010100 ) | |
476 | , BOOST_BINARY( 10010101 ) | |
477 | , BOOST_BINARY( 10010110 ) | |
478 | , BOOST_BINARY( 10010111 ) | |
479 | , BOOST_BINARY( 10011000 ) | |
480 | , BOOST_BINARY( 10011001 ) | |
481 | , BOOST_BINARY( 10011010 ) | |
482 | , BOOST_BINARY( 10011011 ) | |
483 | , BOOST_BINARY( 10011100 ) | |
484 | , BOOST_BINARY( 10011101 ) | |
485 | , BOOST_BINARY( 10011110 ) | |
486 | , BOOST_BINARY( 10011111 ) | |
487 | , BOOST_BINARY( 10100000 ) | |
488 | , BOOST_BINARY( 10100001 ) | |
489 | , BOOST_BINARY( 10100010 ) | |
490 | , BOOST_BINARY( 10100011 ) | |
491 | , BOOST_BINARY( 10100100 ) | |
492 | , BOOST_BINARY( 10100101 ) | |
493 | , BOOST_BINARY( 10100110 ) | |
494 | , BOOST_BINARY( 10100111 ) | |
495 | , BOOST_BINARY( 10101000 ) | |
496 | , BOOST_BINARY( 10101001 ) | |
497 | , BOOST_BINARY( 10101010 ) | |
498 | , BOOST_BINARY( 10101011 ) | |
499 | , BOOST_BINARY( 10101100 ) | |
500 | , BOOST_BINARY( 10101101 ) | |
501 | , BOOST_BINARY( 10101110 ) | |
502 | , BOOST_BINARY( 10101111 ) | |
503 | , BOOST_BINARY( 10110000 ) | |
504 | , BOOST_BINARY( 10110001 ) | |
505 | , BOOST_BINARY( 10110010 ) | |
506 | , BOOST_BINARY( 10110011 ) | |
507 | , BOOST_BINARY( 10110100 ) | |
508 | , BOOST_BINARY( 10110101 ) | |
509 | , BOOST_BINARY( 10110110 ) | |
510 | , BOOST_BINARY( 10110111 ) | |
511 | , BOOST_BINARY( 10111000 ) | |
512 | , BOOST_BINARY( 10111001 ) | |
513 | , BOOST_BINARY( 10111010 ) | |
514 | , BOOST_BINARY( 10111011 ) | |
515 | , BOOST_BINARY( 10111100 ) | |
516 | , BOOST_BINARY( 10111101 ) | |
517 | , BOOST_BINARY( 10111110 ) | |
518 | , BOOST_BINARY( 10111111 ) | |
519 | , BOOST_BINARY( 11000000 ) | |
520 | , BOOST_BINARY( 11000001 ) | |
521 | , BOOST_BINARY( 11000010 ) | |
522 | , BOOST_BINARY( 11000011 ) | |
523 | , BOOST_BINARY( 11000100 ) | |
524 | , BOOST_BINARY( 11000101 ) | |
525 | , BOOST_BINARY( 11000110 ) | |
526 | , BOOST_BINARY( 11000111 ) | |
527 | , BOOST_BINARY( 11001000 ) | |
528 | , BOOST_BINARY( 11001001 ) | |
529 | , BOOST_BINARY( 11001010 ) | |
530 | , BOOST_BINARY( 11001011 ) | |
531 | , BOOST_BINARY( 11001100 ) | |
532 | , BOOST_BINARY( 11001101 ) | |
533 | , BOOST_BINARY( 11001110 ) | |
534 | , BOOST_BINARY( 11001111 ) | |
535 | , BOOST_BINARY( 11010000 ) | |
536 | , BOOST_BINARY( 11010001 ) | |
537 | , BOOST_BINARY( 11010010 ) | |
538 | , BOOST_BINARY( 11010011 ) | |
539 | , BOOST_BINARY( 11010100 ) | |
540 | , BOOST_BINARY( 11010101 ) | |
541 | , BOOST_BINARY( 11010110 ) | |
542 | , BOOST_BINARY( 11010111 ) | |
543 | , BOOST_BINARY( 11011000 ) | |
544 | , BOOST_BINARY( 11011001 ) | |
545 | , BOOST_BINARY( 11011010 ) | |
546 | , BOOST_BINARY( 11011011 ) | |
547 | , BOOST_BINARY( 11011100 ) | |
548 | , BOOST_BINARY( 11011101 ) | |
549 | , BOOST_BINARY( 11011110 ) | |
550 | , BOOST_BINARY( 11011111 ) | |
551 | , BOOST_BINARY( 11100000 ) | |
552 | , BOOST_BINARY( 11100001 ) | |
553 | , BOOST_BINARY( 11100010 ) | |
554 | , BOOST_BINARY( 11100011 ) | |
555 | , BOOST_BINARY( 11100100 ) | |
556 | , BOOST_BINARY( 11100101 ) | |
557 | , BOOST_BINARY( 11100110 ) | |
558 | , BOOST_BINARY( 11100111 ) | |
559 | , BOOST_BINARY( 11101000 ) | |
560 | , BOOST_BINARY( 11101001 ) | |
561 | , BOOST_BINARY( 11101010 ) | |
562 | , BOOST_BINARY( 11101011 ) | |
563 | , BOOST_BINARY( 11101100 ) | |
564 | , BOOST_BINARY( 11101101 ) | |
565 | , BOOST_BINARY( 11101110 ) | |
566 | , BOOST_BINARY( 11101111 ) | |
567 | , BOOST_BINARY( 11110000 ) | |
568 | , BOOST_BINARY( 11110001 ) | |
569 | , BOOST_BINARY( 11110010 ) | |
570 | , BOOST_BINARY( 11110011 ) | |
571 | , BOOST_BINARY( 11110100 ) | |
572 | , BOOST_BINARY( 11110101 ) | |
573 | , BOOST_BINARY( 11110110 ) | |
574 | , BOOST_BINARY( 11110111 ) | |
575 | , BOOST_BINARY( 11111000 ) | |
576 | , BOOST_BINARY( 11111001 ) | |
577 | , BOOST_BINARY( 11111010 ) | |
578 | , BOOST_BINARY( 11111011 ) | |
579 | , BOOST_BINARY( 11111100 ) | |
580 | , BOOST_BINARY( 11111101 ) | |
581 | , BOOST_BINARY( 11111110 ) | |
582 | , BOOST_BINARY( 11111111 ) | |
583 | }; | |
584 | ||
585 | struct left_is_not_one_less_than_right | |
586 | { | |
587 | bool operator ()( unsigned int left, unsigned int right ) const | |
588 | { | |
589 | return right != left + 1; | |
590 | } | |
591 | }; | |
592 | ||
593 | template< std::size_t Size > | |
594 | bool is_ascending_from_0_array( unsigned int const (&array)[Size] ) | |
595 | { | |
596 | unsigned int const* const curr = array, | |
597 | * const end = array + Size; | |
598 | ||
599 | return ( *curr == 0 ) | |
600 | && ( std::adjacent_find( curr, end | |
601 | , left_is_not_one_less_than_right() | |
602 | ) | |
603 | == end | |
604 | ); | |
605 | } | |
606 | ||
607 | std::size_t const unsigned_int_id = 1, | |
608 | unsigned_long_int_id = 2; | |
609 | ||
610 | typedef char (&unsigned_int_id_type)[unsigned_int_id]; | |
611 | typedef char (&unsigned_long_int_id_type)[unsigned_long_int_id]; | |
612 | ||
613 | // Note: Functions only used for type checking | |
614 | unsigned_int_id_type binary_type_checker( unsigned int ); | |
615 | unsigned_long_int_id_type binary_type_checker( unsigned long int ); | |
616 | ||
11fdf7f2 | 617 | int main() |
7c673cae | 618 | { |
11fdf7f2 TL |
619 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_1_bit ) ); |
620 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_2_bits ) ); | |
621 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_3_bits ) ); | |
622 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_4_bits ) ); | |
623 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_5_bits ) ); | |
624 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_6_bits ) ); | |
625 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_7_bits ) ); | |
626 | BOOST_TEST( is_ascending_from_0_array( unsigned_ints_8_bits ) ); | |
7c673cae | 627 | |
11fdf7f2 | 628 | BOOST_TEST( std::equal( &random_unsigned_ints_hex[0] |
7c673cae FG |
629 | , random_unsigned_ints_hex + num_random_test_values |
630 | , &random_unsigned_ints_binary[0] | |
631 | ) | |
632 | ); | |
633 | ||
11fdf7f2 | 634 | BOOST_TEST( sizeof( binary_type_checker( BOOST_BINARY_U( 110100 1010 ) ) ) |
7c673cae FG |
635 | == unsigned_int_id |
636 | ); | |
637 | ||
11fdf7f2 | 638 | BOOST_TEST( sizeof( binary_type_checker( BOOST_BINARY_UL( 11110 ) ) ) |
7c673cae FG |
639 | == unsigned_long_int_id |
640 | ); | |
641 | ||
11fdf7f2 | 642 | BOOST_TEST( sizeof( binary_type_checker( BOOST_BINARY_LU( 10 0001 ) ) ) |
7c673cae FG |
643 | == unsigned_long_int_id |
644 | ); | |
645 | ||
11fdf7f2 | 646 | return boost::report_errors(); |
7c673cae | 647 | } |