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 | |
9 | #include <boost/test/minimal.hpp> |
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( first: curr, last: end |
601 | , binary_pred: 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 | |
617 | int test_main( int, char *[] ) |
618 | { |
619 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_1_bit ) ); |
620 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_2_bits ) ); |
621 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_3_bits ) ); |
622 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_4_bits ) ); |
623 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_5_bits ) ); |
624 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_6_bits ) ); |
625 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_7_bits ) ); |
626 | BOOST_CHECK( is_ascending_from_0_array( unsigned_ints_8_bits ) ); |
627 | |
628 | BOOST_CHECK( std::equal( &random_unsigned_ints_hex[0] |
629 | , random_unsigned_ints_hex + num_random_test_values |
630 | , &random_unsigned_ints_binary[0] |
631 | ) |
632 | ); |
633 | |
634 | BOOST_CHECK( sizeof( binary_type_checker( BOOST_BINARY_U( 110100 1010 ) ) ) |
635 | == unsigned_int_id |
636 | ); |
637 | |
638 | BOOST_CHECK( sizeof( binary_type_checker( BOOST_BINARY_UL( 11110 ) ) ) |
639 | == unsigned_long_int_id |
640 | ); |
641 | |
642 | BOOST_CHECK( sizeof( binary_type_checker( BOOST_BINARY_LU( 10 0001 ) ) ) |
643 | == unsigned_long_int_id |
644 | ); |
645 | |
646 | return 0; |
647 | } |
648 | |