binary_test.cpp 18 KB

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