uint_radix.cpp 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. /*=============================================================================
  2. Copyright (c) 2011 Jan Frederick Eick
  3. Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. =============================================================================*/
  6. #include <boost/config/warning_disable.hpp>
  7. #include <boost/detail/lightweight_test.hpp>
  8. #include <boost/spirit/home/x3.hpp>
  9. #include <climits>
  10. #include <cstring>
  11. #include "test.hpp"
  12. #include "uint_radix.hpp"
  13. int
  14. main()
  15. {
  16. using spirit_test::test;
  17. using spirit_test::test_attr;
  18. using boost::spirit::x3::uint_parser;
  19. ///////////////////////////////////////////////////////////////////////////
  20. // arbitrary radix test (base 3)
  21. ///////////////////////////////////////////////////////////////////////////
  22. {
  23. unsigned int u;
  24. uint_parser<unsigned int, 3, 1, -1> base3_parser;
  25. BOOST_TEST(test("210112221200", base3_parser));
  26. BOOST_TEST(test_attr("210112221200", base3_parser, u));
  27. BOOST_TEST(424242 == u);
  28. BOOST_TEST(!test("1231", base3_parser));
  29. BOOST_TEST(!test_attr("1231", base3_parser, u));
  30. BOOST_TEST(test(max_unsigned_base3, base3_parser));
  31. BOOST_TEST(test_attr(max_unsigned_base3, base3_parser, u));
  32. BOOST_TEST(!test(unsigned_overflow_base3, base3_parser));
  33. BOOST_TEST(!test_attr(unsigned_overflow_base3, base3_parser, u));
  34. BOOST_TEST(!test(digit_overflow_base3, base3_parser));
  35. BOOST_TEST(!test_attr(digit_overflow_base3, base3_parser, u));
  36. }
  37. ///////////////////////////////////////////////////////////////////////////
  38. // arbitrary radix test (base 4)
  39. ///////////////////////////////////////////////////////////////////////////
  40. {
  41. unsigned int u;
  42. uint_parser<unsigned int, 4, 1, -1> base4_parser;
  43. BOOST_TEST(test("1213210302", base4_parser));
  44. BOOST_TEST(test_attr("1213210302", base4_parser, u));
  45. BOOST_TEST(424242 == u);
  46. BOOST_TEST(!test("1234", base4_parser));
  47. BOOST_TEST(!test_attr("1234", base4_parser, u));
  48. BOOST_TEST(test(max_unsigned_base4, base4_parser));
  49. BOOST_TEST(test_attr(max_unsigned_base4, base4_parser, u));
  50. BOOST_TEST(!test(digit_overflow_base4, base4_parser));
  51. BOOST_TEST(!test_attr(digit_overflow_base4, base4_parser, u));
  52. }
  53. ///////////////////////////////////////////////////////////////////////////
  54. // arbitrary radix test (base 5)
  55. ///////////////////////////////////////////////////////////////////////////
  56. {
  57. unsigned int u;
  58. uint_parser<unsigned int, 5, 1, -1> base5_parser;
  59. BOOST_TEST(test("102033432", base5_parser));
  60. BOOST_TEST(test_attr("102033432", base5_parser, u));
  61. BOOST_TEST(424242 == u);
  62. BOOST_TEST(!test("2345", base5_parser));
  63. BOOST_TEST(!test_attr("2345", base5_parser, u));
  64. BOOST_TEST(test(max_unsigned_base5, base5_parser));
  65. BOOST_TEST(test_attr(max_unsigned_base5, base5_parser, u));
  66. BOOST_TEST(!test(unsigned_overflow_base5, base5_parser));
  67. BOOST_TEST(!test_attr(unsigned_overflow_base5, base5_parser, u));
  68. BOOST_TEST(!test(digit_overflow_base5, base5_parser));
  69. BOOST_TEST(!test_attr(digit_overflow_base5, base5_parser, u));
  70. }
  71. ///////////////////////////////////////////////////////////////////////////
  72. // arbitrary radix test (base 6)
  73. ///////////////////////////////////////////////////////////////////////////
  74. {
  75. unsigned int u;
  76. uint_parser<unsigned int, 6, 1, -1> base6_parser;
  77. BOOST_TEST(test("13032030", base6_parser));
  78. BOOST_TEST(test_attr("13032030", base6_parser, u));
  79. BOOST_TEST(424242 == u);
  80. BOOST_TEST(!test("3456", base6_parser));
  81. BOOST_TEST(!test_attr("3456", base6_parser, u));
  82. BOOST_TEST(test(max_unsigned_base6, base6_parser));
  83. BOOST_TEST(test_attr(max_unsigned_base6, base6_parser, u));
  84. BOOST_TEST(!test(unsigned_overflow_base6, base6_parser));
  85. BOOST_TEST(!test_attr(unsigned_overflow_base6, base6_parser, u));
  86. BOOST_TEST(!test(digit_overflow_base6, base6_parser));
  87. BOOST_TEST(!test_attr(digit_overflow_base6, base6_parser, u));
  88. }
  89. ///////////////////////////////////////////////////////////////////////////
  90. // arbitrary radix test (base 7)
  91. ///////////////////////////////////////////////////////////////////////////
  92. {
  93. unsigned int u;
  94. uint_parser<unsigned int, 7, 1, -1> base7_parser;
  95. BOOST_TEST(test("3414600", base7_parser));
  96. BOOST_TEST(test_attr("3414600", base7_parser, u));
  97. BOOST_TEST(424242 == u);
  98. BOOST_TEST(!test("4567", base7_parser));
  99. BOOST_TEST(!test_attr("4567", base7_parser, u));
  100. BOOST_TEST(test(max_unsigned_base7, base7_parser));
  101. BOOST_TEST(test_attr(max_unsigned_base7, base7_parser, u));
  102. BOOST_TEST(!test(unsigned_overflow_base7, base7_parser));
  103. BOOST_TEST(!test_attr(unsigned_overflow_base7, base7_parser, u));
  104. BOOST_TEST(!test(digit_overflow_base7, base7_parser));
  105. BOOST_TEST(!test_attr(digit_overflow_base7, base7_parser, u));
  106. }
  107. ///////////////////////////////////////////////////////////////////////////
  108. // arbitrary radix test (base 9)
  109. ///////////////////////////////////////////////////////////////////////////
  110. {
  111. unsigned int u;
  112. uint_parser<unsigned int, 9, 1, -1> base9_parser;
  113. BOOST_TEST(test("715850", base9_parser));
  114. BOOST_TEST(test_attr("715850", base9_parser, u));
  115. BOOST_TEST(424242 == u);
  116. BOOST_TEST(!test("6789", base9_parser));
  117. BOOST_TEST(!test_attr("6789", base9_parser, u));
  118. BOOST_TEST(test(max_unsigned_base9, base9_parser));
  119. BOOST_TEST(test_attr(max_unsigned_base9, base9_parser, u));
  120. BOOST_TEST(!test(unsigned_overflow_base9, base9_parser));
  121. BOOST_TEST(!test_attr(unsigned_overflow_base9, base9_parser, u));
  122. BOOST_TEST(!test(digit_overflow_base9, base9_parser));
  123. BOOST_TEST(!test_attr(digit_overflow_base9, base9_parser, u));
  124. }
  125. ///////////////////////////////////////////////////////////////////////////
  126. // arbitrary radix test (base 11)
  127. ///////////////////////////////////////////////////////////////////////////
  128. {
  129. unsigned int u;
  130. uint_parser<unsigned int, 11, 1, -1> base11_parser;
  131. BOOST_TEST(test("26a815", base11_parser));
  132. BOOST_TEST(test_attr("26a815", base11_parser, u));
  133. BOOST_TEST(424242 == u);
  134. BOOST_TEST(!test("90ab", base11_parser));
  135. BOOST_TEST(!test_attr("90AB", base11_parser, u));
  136. BOOST_TEST(test(max_unsigned_base11, base11_parser));
  137. BOOST_TEST(test_attr(max_unsigned_base11, base11_parser, u));
  138. BOOST_TEST(!test(unsigned_overflow_base11, base11_parser));
  139. BOOST_TEST(!test_attr(unsigned_overflow_base11, base11_parser, u));
  140. BOOST_TEST(!test(digit_overflow_base11, base11_parser));
  141. BOOST_TEST(!test_attr(digit_overflow_base11, base11_parser, u));
  142. }
  143. ///////////////////////////////////////////////////////////////////////////
  144. // arbitrary radix test (base 12)
  145. ///////////////////////////////////////////////////////////////////////////
  146. {
  147. unsigned int u;
  148. uint_parser<unsigned int, 12, 1, -1> base12_parser;
  149. BOOST_TEST(test("185616", base12_parser));
  150. BOOST_TEST(test_attr("185616", base12_parser, u));
  151. BOOST_TEST(424242 == u);
  152. BOOST_TEST(!test("9abc", base12_parser));
  153. BOOST_TEST(!test_attr("9ABC", base12_parser, u));
  154. BOOST_TEST(test(max_unsigned_base12, base12_parser));
  155. BOOST_TEST(test_attr(max_unsigned_base12, base12_parser, u));
  156. BOOST_TEST(!test(unsigned_overflow_base12, base12_parser));
  157. BOOST_TEST(!test_attr(unsigned_overflow_base12, base12_parser, u));
  158. BOOST_TEST(!test(digit_overflow_base12, base12_parser));
  159. BOOST_TEST(!test_attr(digit_overflow_base12, base12_parser, u));
  160. }
  161. ///////////////////////////////////////////////////////////////////////////
  162. // arbitrary radix test (base 13)
  163. ///////////////////////////////////////////////////////////////////////////
  164. {
  165. unsigned int u;
  166. uint_parser<unsigned int, 13, 1, -1> base13_parser;
  167. BOOST_TEST(test("11b140", base13_parser));
  168. BOOST_TEST(test_attr("11b140", base13_parser, u));
  169. BOOST_TEST(424242 == u);
  170. BOOST_TEST(!test("abcd", base13_parser));
  171. BOOST_TEST(!test_attr("ABCD", base13_parser, u));
  172. BOOST_TEST(test(max_unsigned_base13, base13_parser));
  173. BOOST_TEST(test_attr(max_unsigned_base13, base13_parser, u));
  174. BOOST_TEST(!test(unsigned_overflow_base13, base13_parser));
  175. BOOST_TEST(!test_attr(unsigned_overflow_base13, base13_parser, u));
  176. BOOST_TEST(!test(digit_overflow_base13, base13_parser));
  177. BOOST_TEST(!test_attr(digit_overflow_base13, base13_parser, u));
  178. }
  179. ///////////////////////////////////////////////////////////////////////////
  180. // arbitrary radix test (base 14)
  181. ///////////////////////////////////////////////////////////////////////////
  182. {
  183. unsigned int u;
  184. uint_parser<unsigned int, 14, 1, -1> base14_parser;
  185. BOOST_TEST(test("b0870", base14_parser));
  186. BOOST_TEST(test_attr("b0870", base14_parser, u));
  187. BOOST_TEST(424242 == u);
  188. BOOST_TEST(!test("bcde", base14_parser));
  189. BOOST_TEST(!test_attr("BCDE", base14_parser, u));
  190. BOOST_TEST(test(max_unsigned_base14, base14_parser));
  191. BOOST_TEST(test_attr(max_unsigned_base14, base14_parser, u));
  192. BOOST_TEST(!test(unsigned_overflow_base14, base14_parser));
  193. BOOST_TEST(!test_attr(unsigned_overflow_base14, base14_parser, u));
  194. BOOST_TEST(!test(digit_overflow_base14, base14_parser));
  195. BOOST_TEST(!test_attr(digit_overflow_base14, base14_parser, u));
  196. }
  197. ///////////////////////////////////////////////////////////////////////////
  198. // arbitrary radix test (base 15)
  199. ///////////////////////////////////////////////////////////////////////////
  200. {
  201. unsigned int u;
  202. uint_parser<unsigned int, 15, 1, -1> base15_parser;
  203. BOOST_TEST(test("85a7c", base15_parser));
  204. BOOST_TEST(test_attr("85a7c", base15_parser, u));
  205. BOOST_TEST(424242 == u);
  206. BOOST_TEST(!test("cdef", base15_parser));
  207. BOOST_TEST(!test_attr("CDEF", base15_parser, u));
  208. BOOST_TEST(test(max_unsigned_base15, base15_parser));
  209. BOOST_TEST(test_attr(max_unsigned_base15, base15_parser, u));
  210. BOOST_TEST(!test(unsigned_overflow_base15, base15_parser));
  211. BOOST_TEST(!test_attr(unsigned_overflow_base15, base15_parser, u));
  212. BOOST_TEST(!test(digit_overflow_base15, base15_parser));
  213. BOOST_TEST(!test_attr(digit_overflow_base15, base15_parser, u));
  214. }
  215. ///////////////////////////////////////////////////////////////////////////
  216. // arbitrary radix test (base 17)
  217. ///////////////////////////////////////////////////////////////////////////
  218. {
  219. unsigned int u;
  220. uint_parser<unsigned int, 17, 1, -1> base17_parser;
  221. BOOST_TEST(test("515g7", base17_parser));
  222. BOOST_TEST(test_attr("515g7", base17_parser, u));
  223. BOOST_TEST(424242 == u);
  224. BOOST_TEST(!test("efgh", base17_parser));
  225. BOOST_TEST(!test_attr("EFGH", base17_parser, u));
  226. BOOST_TEST(test(max_unsigned_base17, base17_parser));
  227. BOOST_TEST(test_attr(max_unsigned_base17, base17_parser, u));
  228. BOOST_TEST(!test(unsigned_overflow_base17, base17_parser));
  229. BOOST_TEST(!test_attr(unsigned_overflow_base17, base17_parser, u));
  230. BOOST_TEST(!test(digit_overflow_base17, base17_parser));
  231. BOOST_TEST(!test_attr(digit_overflow_base17, base17_parser, u));
  232. }
  233. ///////////////////////////////////////////////////////////////////////////
  234. // arbitrary radix test (base 18)
  235. ///////////////////////////////////////////////////////////////////////////
  236. {
  237. unsigned int u;
  238. uint_parser<unsigned int, 18, 1, -1> base18_parser;
  239. BOOST_TEST(test("40d70", base18_parser));
  240. BOOST_TEST(test_attr("40d70", base18_parser, u));
  241. BOOST_TEST(424242 == u);
  242. BOOST_TEST(!test("fghi", base18_parser));
  243. BOOST_TEST(!test_attr("FGHI", base18_parser, u));
  244. BOOST_TEST(test(max_unsigned_base18, base18_parser));
  245. BOOST_TEST(test_attr(max_unsigned_base18, base18_parser, u));
  246. BOOST_TEST(!test(unsigned_overflow_base18, base18_parser));
  247. BOOST_TEST(!test_attr(unsigned_overflow_base18, base18_parser, u));
  248. BOOST_TEST(!test(digit_overflow_base18, base18_parser));
  249. BOOST_TEST(!test_attr(digit_overflow_base18, base18_parser, u));
  250. }
  251. ///////////////////////////////////////////////////////////////////////////
  252. // arbitrary radix test (base 19)
  253. ///////////////////////////////////////////////////////////////////////////
  254. {
  255. unsigned int u;
  256. uint_parser<unsigned int, 19, 1, -1> base19_parser;
  257. BOOST_TEST(test("34g3a", base19_parser));
  258. BOOST_TEST(test_attr("34g3a", base19_parser, u));
  259. BOOST_TEST(424242 == u);
  260. BOOST_TEST(!test("ghij", base19_parser));
  261. BOOST_TEST(!test_attr("GHIJ", base19_parser, u));
  262. BOOST_TEST(test(max_unsigned_base19, base19_parser));
  263. BOOST_TEST(test_attr(max_unsigned_base19, base19_parser, u));
  264. BOOST_TEST(!test(unsigned_overflow_base19, base19_parser));
  265. BOOST_TEST(!test_attr(unsigned_overflow_base19, base19_parser, u));
  266. BOOST_TEST(!test(digit_overflow_base19, base19_parser));
  267. BOOST_TEST(!test_attr(digit_overflow_base19, base19_parser, u));
  268. }
  269. ///////////////////////////////////////////////////////////////////////////
  270. // arbitrary radix test (base 20)
  271. ///////////////////////////////////////////////////////////////////////////
  272. {
  273. unsigned int u;
  274. uint_parser<unsigned int, 20, 1, -1> base20_parser;
  275. BOOST_TEST(test("2d0c2", base20_parser));
  276. BOOST_TEST(test_attr("2d0c2", base20_parser, u));
  277. BOOST_TEST(424242 == u);
  278. BOOST_TEST(!test("hijk", base20_parser));
  279. BOOST_TEST(!test_attr("HIJK", base20_parser, u));
  280. BOOST_TEST(test(max_unsigned_base20, base20_parser));
  281. BOOST_TEST(test_attr(max_unsigned_base20, base20_parser, u));
  282. BOOST_TEST(!test(unsigned_overflow_base20, base20_parser));
  283. BOOST_TEST(!test_attr(unsigned_overflow_base20, base20_parser, u));
  284. BOOST_TEST(!test(digit_overflow_base20, base20_parser));
  285. BOOST_TEST(!test_attr(digit_overflow_base20, base20_parser, u));
  286. }
  287. ///////////////////////////////////////////////////////////////////////////
  288. // arbitrary radix test (base 21)
  289. ///////////////////////////////////////////////////////////////////////////
  290. {
  291. unsigned int u;
  292. uint_parser<unsigned int, 21, 1, -1> base21_parser;
  293. BOOST_TEST(test("23h00", base21_parser));
  294. BOOST_TEST(test_attr("23h00", base21_parser, u));
  295. BOOST_TEST(424242 == u);
  296. BOOST_TEST(!test("ijkl", base21_parser));
  297. BOOST_TEST(!test_attr("IJKL", base21_parser, u));
  298. BOOST_TEST(test(max_unsigned_base21, base21_parser));
  299. BOOST_TEST(test_attr(max_unsigned_base21, base21_parser, u));
  300. BOOST_TEST(!test(unsigned_overflow_base21, base21_parser));
  301. BOOST_TEST(!test_attr(unsigned_overflow_base21, base21_parser, u));
  302. BOOST_TEST(!test(digit_overflow_base21, base21_parser));
  303. BOOST_TEST(!test_attr(digit_overflow_base21, base21_parser, u));
  304. }
  305. ///////////////////////////////////////////////////////////////////////////
  306. // arbitrary radix test (base 22)
  307. ///////////////////////////////////////////////////////////////////////////
  308. {
  309. unsigned int u;
  310. uint_parser<unsigned int, 22, 1, -1> base22_parser;
  311. BOOST_TEST(test("1hibg", base22_parser));
  312. BOOST_TEST(test_attr("1hibg", base22_parser, u));
  313. BOOST_TEST(424242 == u);
  314. BOOST_TEST(!test("jklm", base22_parser));
  315. BOOST_TEST(!test_attr("JKLM", base22_parser, u));
  316. BOOST_TEST(test(max_unsigned_base22, base22_parser));
  317. BOOST_TEST(test_attr(max_unsigned_base22, base22_parser, u));
  318. BOOST_TEST(!test(unsigned_overflow_base22, base22_parser));
  319. BOOST_TEST(!test_attr(unsigned_overflow_base22, base22_parser, u));
  320. BOOST_TEST(!test(digit_overflow_base22, base22_parser));
  321. BOOST_TEST(!test_attr(digit_overflow_base22, base22_parser, u));
  322. }
  323. ///////////////////////////////////////////////////////////////////////////
  324. // arbitrary radix test (base 23)
  325. ///////////////////////////////////////////////////////////////////////////
  326. {
  327. unsigned int u;
  328. uint_parser<unsigned int, 23, 1, -1> base23_parser;
  329. BOOST_TEST(test("1bjm7", base23_parser));
  330. BOOST_TEST(test_attr("1bjm7", base23_parser, u));
  331. BOOST_TEST(424242 == u);
  332. BOOST_TEST(!test("klmn", base23_parser));
  333. BOOST_TEST(!test_attr("KLMN", base23_parser, u));
  334. BOOST_TEST(test(max_unsigned_base23, base23_parser));
  335. BOOST_TEST(test_attr(max_unsigned_base23, base23_parser, u));
  336. BOOST_TEST(!test(unsigned_overflow_base23, base23_parser));
  337. BOOST_TEST(!test_attr(unsigned_overflow_base23, base23_parser, u));
  338. BOOST_TEST(!test(digit_overflow_base23, base23_parser));
  339. BOOST_TEST(!test_attr(digit_overflow_base23, base23_parser, u));
  340. }
  341. ///////////////////////////////////////////////////////////////////////////
  342. // arbitrary radix test (base 24)
  343. ///////////////////////////////////////////////////////////////////////////
  344. {
  345. unsigned int u;
  346. uint_parser<unsigned int, 24, 1, -1> base24_parser;
  347. BOOST_TEST(test("16gci", base24_parser));
  348. BOOST_TEST(test_attr("16gci", base24_parser, u));
  349. BOOST_TEST(424242 == u);
  350. BOOST_TEST(!test("lmno", base24_parser));
  351. BOOST_TEST(!test_attr("LMNO", base24_parser, u));
  352. BOOST_TEST(test(max_unsigned_base24, base24_parser));
  353. BOOST_TEST(test_attr(max_unsigned_base24, base24_parser, u));
  354. BOOST_TEST(!test(unsigned_overflow_base24, base24_parser));
  355. BOOST_TEST(!test_attr(unsigned_overflow_base24, base24_parser, u));
  356. BOOST_TEST(!test(digit_overflow_base24, base24_parser));
  357. BOOST_TEST(!test_attr(digit_overflow_base24, base24_parser, u));
  358. }
  359. ///////////////////////////////////////////////////////////////////////////
  360. // arbitrary radix test (base 25)
  361. ///////////////////////////////////////////////////////////////////////////
  362. {
  363. unsigned int u;
  364. uint_parser<unsigned int, 25, 1, -1> base25_parser;
  365. BOOST_TEST(test("123jh", base25_parser));
  366. BOOST_TEST(test_attr("123jh", base25_parser, u));
  367. BOOST_TEST(424242 == u);
  368. BOOST_TEST(!test("mnop", base25_parser));
  369. BOOST_TEST(!test_attr("MNOP", base25_parser, u));
  370. BOOST_TEST(test(max_unsigned_base25, base25_parser));
  371. BOOST_TEST(test_attr(max_unsigned_base25, base25_parser, u));
  372. BOOST_TEST(!test(unsigned_overflow_base25, base25_parser));
  373. BOOST_TEST(!test_attr(unsigned_overflow_base25, base25_parser, u));
  374. BOOST_TEST(!test(digit_overflow_base25, base25_parser));
  375. BOOST_TEST(!test_attr(digit_overflow_base25, base25_parser, u));
  376. }
  377. ///////////////////////////////////////////////////////////////////////////
  378. // arbitrary radix test (base 26)
  379. ///////////////////////////////////////////////////////////////////////////
  380. {
  381. unsigned int u;
  382. uint_parser<unsigned int, 26, 1, -1> base26_parser;
  383. BOOST_TEST(test("o3f0", base26_parser));
  384. BOOST_TEST(test_attr("o3f0", base26_parser, u));
  385. BOOST_TEST(424242 == u);
  386. BOOST_TEST(!test("nopq", base26_parser));
  387. BOOST_TEST(!test_attr("NOPQ", base26_parser, u));
  388. BOOST_TEST(test(max_unsigned_base26, base26_parser));
  389. BOOST_TEST(test_attr(max_unsigned_base26, base26_parser, u));
  390. BOOST_TEST(!test(unsigned_overflow_base26, base26_parser));
  391. BOOST_TEST(!test_attr(unsigned_overflow_base26, base26_parser, u));
  392. BOOST_TEST(!test(digit_overflow_base26, base26_parser));
  393. BOOST_TEST(!test_attr(digit_overflow_base26, base26_parser, u));
  394. }
  395. ///////////////////////////////////////////////////////////////////////////
  396. // arbitrary radix test (base 27)
  397. ///////////////////////////////////////////////////////////////////////////
  398. {
  399. unsigned int u;
  400. uint_parser<unsigned int, 27, 1, -1> base27_parser;
  401. BOOST_TEST(test("lepi", base27_parser));
  402. BOOST_TEST(test_attr("lepi", base27_parser, u));
  403. BOOST_TEST(424242 == u);
  404. BOOST_TEST(!test("opqr", base27_parser));
  405. BOOST_TEST(!test_attr("OPQR", base27_parser, u));
  406. BOOST_TEST(test(max_unsigned_base27, base27_parser));
  407. BOOST_TEST(test_attr(max_unsigned_base27, base27_parser, u));
  408. BOOST_TEST(!test(unsigned_overflow_base27, base27_parser));
  409. BOOST_TEST(!test_attr(unsigned_overflow_base27, base27_parser, u));
  410. BOOST_TEST(!test(digit_overflow_base27, base27_parser));
  411. BOOST_TEST(!test_attr(digit_overflow_base27, base27_parser, u));
  412. }
  413. ///////////////////////////////////////////////////////////////////////////
  414. // arbitrary radix test (base 28)
  415. ///////////////////////////////////////////////////////////////////////////
  416. {
  417. unsigned int u;
  418. uint_parser<unsigned int, 28, 1, -1> base28_parser;
  419. BOOST_TEST(test("j93e", base28_parser));
  420. BOOST_TEST(test_attr("j93e", base28_parser, u));
  421. BOOST_TEST(424242 == u);
  422. BOOST_TEST(!test("pqrs", base28_parser));
  423. BOOST_TEST(!test_attr("PQRS", base28_parser, u));
  424. BOOST_TEST(test(max_unsigned_base28, base28_parser));
  425. BOOST_TEST(test_attr(max_unsigned_base28, base28_parser, u));
  426. BOOST_TEST(!test(unsigned_overflow_base28, base28_parser));
  427. BOOST_TEST(!test_attr(unsigned_overflow_base28, base28_parser, u));
  428. BOOST_TEST(!test(digit_overflow_base28, base28_parser));
  429. BOOST_TEST(!test_attr(digit_overflow_base28, base28_parser, u));
  430. }
  431. ///////////////////////////////////////////////////////////////////////////
  432. // arbitrary radix test (base 29)
  433. ///////////////////////////////////////////////////////////////////////////
  434. {
  435. unsigned int u;
  436. uint_parser<unsigned int, 29, 1, -1> base29_parser;
  437. BOOST_TEST(test("hbd1", base29_parser));
  438. BOOST_TEST(test_attr("hbd1", base29_parser, u));
  439. BOOST_TEST(424242 == u);
  440. BOOST_TEST(!test("qrst", base29_parser));
  441. BOOST_TEST(!test_attr("QRST", base29_parser, u));
  442. BOOST_TEST(test(max_unsigned_base29, base29_parser));
  443. BOOST_TEST(test_attr(max_unsigned_base29, base29_parser, u));
  444. BOOST_TEST(!test(unsigned_overflow_base29, base29_parser));
  445. BOOST_TEST(!test_attr(unsigned_overflow_base29, base29_parser, u));
  446. BOOST_TEST(!test(digit_overflow_base29, base29_parser));
  447. BOOST_TEST(!test_attr(digit_overflow_base29, base29_parser, u));
  448. }
  449. ///////////////////////////////////////////////////////////////////////////
  450. // arbitrary radix test (base 30)
  451. ///////////////////////////////////////////////////////////////////////////
  452. {
  453. unsigned int u;
  454. uint_parser<unsigned int, 30, 1, -1> base30_parser;
  455. BOOST_TEST(test("flbc", base30_parser));
  456. BOOST_TEST(test_attr("flbc", base30_parser, u));
  457. BOOST_TEST(424242 == u);
  458. BOOST_TEST(!test("rstu", base30_parser));
  459. BOOST_TEST(!test_attr("RSTU", base30_parser, u));
  460. BOOST_TEST(test(max_unsigned_base30, base30_parser));
  461. BOOST_TEST(test_attr(max_unsigned_base30, base30_parser, u));
  462. BOOST_TEST(!test(unsigned_overflow_base30, base30_parser));
  463. BOOST_TEST(!test_attr(unsigned_overflow_base30, base30_parser, u));
  464. BOOST_TEST(!test(digit_overflow_base30, base30_parser));
  465. BOOST_TEST(!test_attr(digit_overflow_base30, base30_parser, u));
  466. }
  467. ///////////////////////////////////////////////////////////////////////////
  468. // arbitrary radix test (base 31)
  469. ///////////////////////////////////////////////////////////////////////////
  470. {
  471. unsigned int u;
  472. uint_parser<unsigned int, 31, 1, -1> base31_parser;
  473. BOOST_TEST(test("e7e7", base31_parser));
  474. BOOST_TEST(test_attr("e7e7", base31_parser, u));
  475. BOOST_TEST(424242 == u);
  476. BOOST_TEST(!test("stuv", base31_parser));
  477. BOOST_TEST(!test_attr("STUV", base31_parser, u));
  478. BOOST_TEST(test(max_unsigned_base31, base31_parser));
  479. BOOST_TEST(test_attr(max_unsigned_base31, base31_parser, u));
  480. BOOST_TEST(!test(unsigned_overflow_base31, base31_parser));
  481. BOOST_TEST(!test_attr(unsigned_overflow_base31, base31_parser, u));
  482. BOOST_TEST(!test(digit_overflow_base31, base31_parser));
  483. BOOST_TEST(!test_attr(digit_overflow_base31, base31_parser, u));
  484. }
  485. ///////////////////////////////////////////////////////////////////////////
  486. // arbitrary radix test (base 32)
  487. ///////////////////////////////////////////////////////////////////////////
  488. {
  489. unsigned int u;
  490. uint_parser<unsigned int, 32, 1, -1> base32_parser;
  491. BOOST_TEST(test("cu9i", base32_parser));
  492. BOOST_TEST(test_attr("cu9i", base32_parser, u));
  493. BOOST_TEST(424242 == u);
  494. BOOST_TEST(!test("tuvw", base32_parser));
  495. BOOST_TEST(!test_attr("TUVW", base32_parser, u));
  496. BOOST_TEST(test(max_unsigned_base32, base32_parser));
  497. BOOST_TEST(test_attr(max_unsigned_base32, base32_parser, u));
  498. BOOST_TEST(!test(unsigned_overflow_base32, base32_parser));
  499. BOOST_TEST(!test_attr(unsigned_overflow_base32, base32_parser, u));
  500. BOOST_TEST(!test(digit_overflow_base32, base32_parser));
  501. BOOST_TEST(!test_attr(digit_overflow_base32, base32_parser, u));
  502. }
  503. ///////////////////////////////////////////////////////////////////////////
  504. // arbitrary radix test (base 33)
  505. ///////////////////////////////////////////////////////////////////////////
  506. {
  507. unsigned int u;
  508. uint_parser<unsigned int, 33, 1, -1> base33_parser;
  509. BOOST_TEST(test("bqir", base33_parser));
  510. BOOST_TEST(test_attr("bqir", base33_parser, u));
  511. BOOST_TEST(424242 == u);
  512. BOOST_TEST(!test("uvwx", base33_parser));
  513. BOOST_TEST(!test_attr("UVWX", base33_parser, u));
  514. BOOST_TEST(test(max_unsigned_base33, base33_parser));
  515. BOOST_TEST(test_attr(max_unsigned_base33, base33_parser, u));
  516. BOOST_TEST(!test(unsigned_overflow_base33, base33_parser));
  517. BOOST_TEST(!test_attr(unsigned_overflow_base33, base33_parser, u));
  518. BOOST_TEST(!test(digit_overflow_base33, base33_parser));
  519. BOOST_TEST(!test_attr(digit_overflow_base33, base33_parser, u));
  520. }
  521. ///////////////////////////////////////////////////////////////////////////
  522. // arbitrary radix test (base 34)
  523. ///////////////////////////////////////////////////////////////////////////
  524. {
  525. unsigned int u;
  526. uint_parser<unsigned int, 34, 1, -1> base34_parser;
  527. BOOST_TEST(test("aqxo", base34_parser));
  528. BOOST_TEST(test_attr("aqxo", base34_parser, u));
  529. BOOST_TEST(424242 == u);
  530. BOOST_TEST(!test("vwxy", base34_parser));
  531. BOOST_TEST(!test_attr("VWXY", base34_parser, u));
  532. BOOST_TEST(test(max_unsigned_base34, base34_parser));
  533. BOOST_TEST(test_attr(max_unsigned_base34, base34_parser, u));
  534. BOOST_TEST(!test(unsigned_overflow_base34, base34_parser));
  535. BOOST_TEST(!test_attr(unsigned_overflow_base34, base34_parser, u));
  536. BOOST_TEST(!test(digit_overflow_base34, base34_parser));
  537. BOOST_TEST(!test_attr(digit_overflow_base34, base34_parser, u));
  538. }
  539. ///////////////////////////////////////////////////////////////////////////
  540. // arbitrary radix test (base 35)
  541. ///////////////////////////////////////////////////////////////////////////
  542. {
  543. unsigned int u;
  544. uint_parser<unsigned int, 35, 1, -1> base35_parser;
  545. BOOST_TEST(test("9vb7", base35_parser));
  546. BOOST_TEST(test_attr("9vb7", base35_parser, u));
  547. BOOST_TEST(424242 == u);
  548. BOOST_TEST(!test("wxyz", base35_parser));
  549. BOOST_TEST(!test_attr("WXYZ", base35_parser, u));
  550. BOOST_TEST(test(max_unsigned_base35, base35_parser));
  551. BOOST_TEST(test_attr(max_unsigned_base35, base35_parser, u));
  552. BOOST_TEST(!test(unsigned_overflow_base35, base35_parser));
  553. BOOST_TEST(!test_attr(unsigned_overflow_base35, base35_parser, u));
  554. BOOST_TEST(!test(digit_overflow_base35, base35_parser));
  555. BOOST_TEST(!test_attr(digit_overflow_base35, base35_parser, u));
  556. }
  557. ///////////////////////////////////////////////////////////////////////////
  558. // arbitrary radix test (base 36)
  559. ///////////////////////////////////////////////////////////////////////////
  560. {
  561. unsigned int u;
  562. uint_parser<unsigned int, 36, 1, -1> base36_parser;
  563. BOOST_TEST(test("93ci", base36_parser));
  564. BOOST_TEST(test_attr("93ci", base36_parser, u));
  565. BOOST_TEST(424242 == u);
  566. BOOST_TEST(test(max_unsigned_base36, base36_parser));
  567. BOOST_TEST(test_attr(max_unsigned_base36, base36_parser, u));
  568. BOOST_TEST(!test(unsigned_overflow_base36, base36_parser));
  569. BOOST_TEST(!test_attr(unsigned_overflow_base36, base36_parser, u));
  570. BOOST_TEST(!test(digit_overflow_base36, base36_parser));
  571. BOOST_TEST(!test_attr(digit_overflow_base36, base36_parser, u));
  572. }
  573. return boost::report_errors();
  574. }