uint_radix.cpp 34 KB

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