Brian Silverman | 60e3e2a | 2018-08-04 23:57:12 -0700 | [diff] [blame^] | 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/core/lightweight_test.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( 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 | |
| 617 | int main() |
| 618 | { |
| 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 ) ); |
| 627 | |
| 628 | BOOST_TEST( 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_TEST( sizeof( binary_type_checker( BOOST_BINARY_U( 110100 1010 ) ) ) |
| 635 | == unsigned_int_id |
| 636 | ); |
| 637 | |
| 638 | BOOST_TEST( sizeof( binary_type_checker( BOOST_BINARY_UL( 11110 ) ) ) |
| 639 | == unsigned_long_int_id |
| 640 | ); |
| 641 | |
| 642 | BOOST_TEST( sizeof( binary_type_checker( BOOST_BINARY_LU( 10 0001 ) ) ) |
| 643 | == unsigned_long_int_id |
| 644 | ); |
| 645 | |
| 646 | return boost::report_errors(); |
| 647 | } |