1// Copyright (c) 2001-2011 Hartmut Kaiser
2// Copyright (c) 2011 Jan Frederick Eick
3//
4// Distributed under the Boost Software License, Version 1.0. (See accompanying
5// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7#include <boost/spirit/include/karma_uint.hpp>
8
9#include <boost/cstdint.hpp>
10
11#include "test.hpp"
12
13///////////////////////////////////////////////////////////////////////////////
14//
15// *** BEWARE PLATFORM DEPENDENT!!! ***
16// *** The following assumes 32 bit boost::uint32_tegers.
17// *** Modify these constants when appropriate.
18//
19///////////////////////////////////////////////////////////////////////////////
20
21char const* max_unsigned_base2 = "11111111111111111111111111111111";
22char const* max_unsigned_base3 = "102002022201221111210";
23char const* max_unsigned_base4 = "3333333333333333";
24char const* max_unsigned_base5 = "32244002423140";
25char const* max_unsigned_base6 = "1550104015503";
26char const* max_unsigned_base7 = "211301422353";
27char const* max_unsigned_base8 = "37777777777";
28char const* max_unsigned_base9 = "12068657453";
29char const* max_unsigned_base11 = "1904440553";
30char const* max_unsigned_base12 = "9ba461593";
31char const* max_unsigned_base13 = "535a79888";
32char const* max_unsigned_base14 = "2ca5b7463";
33char const* max_unsigned_base15 = "1a20dcd80";
34char const* max_unsigned_base16 = "ffffffff";
35char const* max_unsigned_base17 = "a7ffda90";
36char const* max_unsigned_base18 = "704he7g3";
37char const* max_unsigned_base19 = "4f5aff65";
38char const* max_unsigned_base20 = "3723ai4f";
39char const* max_unsigned_base21 = "281d55i3";
40char const* max_unsigned_base22 = "1fj8b183";
41char const* max_unsigned_base23 = "1606k7ib";
42char const* max_unsigned_base24 = "mb994af";
43char const* max_unsigned_base25 = "hek2mgk";
44char const* max_unsigned_base26 = "dnchbnl";
45char const* max_unsigned_base27 = "b28jpdl";
46char const* max_unsigned_base28 = "8pfgih3";
47char const* max_unsigned_base29 = "76beigf";
48char const* max_unsigned_base30 = "5qmcpqf";
49char const* max_unsigned_base31 = "4q0jto3";
50char const* max_unsigned_base32 = "3vvvvvv";
51char const* max_unsigned_base33 = "3aokq93";
52char const* max_unsigned_base34 = "2qhxjlh";
53char const* max_unsigned_base35 = "2br45qa";
54char const* max_unsigned_base36 = "1z141z3";
55
56int
57main()
58{
59 using spirit_test::test;
60 using boost::spirit::karma::uint_generator;
61
62 ///////////////////////////////////////////////////////////////////////////
63 // arbitrary radix test (base 2)
64 ///////////////////////////////////////////////////////////////////////////
65 {
66 uint_generator<boost::uint32_t, 2> base2_generator;
67
68 BOOST_TEST(test("1100111100100110010", base2_generator(424242)));
69 BOOST_TEST(test("1100111100100110010", base2_generator, 424242));
70
71 BOOST_TEST(test(max_unsigned_base2, base2_generator(0xffffffffu)));
72 BOOST_TEST(test(max_unsigned_base2, base2_generator, 0xffffffffu));
73 }
74
75 ///////////////////////////////////////////////////////////////////////////
76 // arbitrary radix test (base 3)
77 ///////////////////////////////////////////////////////////////////////////
78 {
79 uint_generator<boost::uint32_t, 3> base3_generator;
80
81 BOOST_TEST(test("210112221200", base3_generator(424242)));
82 BOOST_TEST(test("210112221200", base3_generator, 424242));
83
84 BOOST_TEST(test(max_unsigned_base3, base3_generator(0xffffffffu)));
85 BOOST_TEST(test(max_unsigned_base3, base3_generator, 0xffffffffu));
86 }
87
88 ///////////////////////////////////////////////////////////////////////////
89 // arbitrary radix test (base 4)
90 ///////////////////////////////////////////////////////////////////////////
91 {
92 uint_generator<boost::uint32_t, 4> base4_generator;
93
94 BOOST_TEST(test("1213210302", base4_generator(424242)));
95 BOOST_TEST(test("1213210302", base4_generator, 424242));
96
97 BOOST_TEST(test(max_unsigned_base4, base4_generator(0xffffffffu)));
98 BOOST_TEST(test(max_unsigned_base4, base4_generator, 0xffffffffu));
99 }
100
101 ///////////////////////////////////////////////////////////////////////////
102 // arbitrary radix test (base 5)
103 ///////////////////////////////////////////////////////////////////////////
104 {
105 uint_generator<boost::uint32_t, 5> base5_generator;
106
107 BOOST_TEST(test("102033432", base5_generator(424242)));
108 BOOST_TEST(test("102033432", base5_generator, 424242));
109
110 BOOST_TEST(test(max_unsigned_base5, base5_generator(0xffffffffu)));
111 BOOST_TEST(test(max_unsigned_base5, base5_generator, 0xffffffffu));
112 }
113
114 ///////////////////////////////////////////////////////////////////////////
115 // arbitrary radix test (base 6)
116 ///////////////////////////////////////////////////////////////////////////
117 {
118 uint_generator<boost::uint32_t, 6> base6_generator;
119
120 BOOST_TEST(test("13032030", base6_generator(424242)));
121 BOOST_TEST(test("13032030", base6_generator, 424242));
122
123 BOOST_TEST(test(max_unsigned_base6, base6_generator(0xffffffffu)));
124 BOOST_TEST(test(max_unsigned_base6, base6_generator, 0xffffffffu));
125 }
126
127 ///////////////////////////////////////////////////////////////////////////
128 // arbitrary radix test (base 7)
129 ///////////////////////////////////////////////////////////////////////////
130 {
131 uint_generator<boost::uint32_t, 7> base7_generator;
132
133 BOOST_TEST(test("3414600", base7_generator(424242)));
134 BOOST_TEST(test("3414600", base7_generator, 424242));
135
136 BOOST_TEST(test(max_unsigned_base7, base7_generator(0xffffffffu)));
137 BOOST_TEST(test(max_unsigned_base7, base7_generator, 0xffffffffu));
138 }
139
140 ///////////////////////////////////////////////////////////////////////////
141 // arbitrary radix test (base 8)
142 ///////////////////////////////////////////////////////////////////////////
143 {
144 uint_generator<boost::uint32_t, 8> base8_generator;
145
146 BOOST_TEST(test("1474462", base8_generator(424242)));
147 BOOST_TEST(test("1474462", base8_generator, 424242));
148
149 BOOST_TEST(test(max_unsigned_base8, base8_generator(0xffffffffu)));
150 BOOST_TEST(test(max_unsigned_base8, base8_generator, 0xffffffffu));
151 }
152
153 ///////////////////////////////////////////////////////////////////////////
154 // arbitrary radix test (base 9)
155 ///////////////////////////////////////////////////////////////////////////
156 {
157 uint_generator<boost::uint32_t, 9> base9_generator;
158
159 BOOST_TEST(test("715850", base9_generator(424242)));
160 BOOST_TEST(test("715850", base9_generator, 424242));
161
162 BOOST_TEST(test(max_unsigned_base9, base9_generator(0xffffffffu)));
163 BOOST_TEST(test(max_unsigned_base9, base9_generator, 0xffffffffu));
164 }
165
166 ///////////////////////////////////////////////////////////////////////////
167 // arbitrary radix test (base 11)
168 ///////////////////////////////////////////////////////////////////////////
169 {
170 uint_generator<boost::uint32_t, 11> base11_generator;
171
172 BOOST_TEST(test("26a815", base11_generator(424242)));
173 BOOST_TEST(test("26a815", base11_generator, 424242));
174
175 BOOST_TEST(test(max_unsigned_base11, base11_generator(0xffffffffu)));
176 BOOST_TEST(test(max_unsigned_base11, base11_generator, 0xffffffffu));
177 }
178
179 ///////////////////////////////////////////////////////////////////////////
180 // arbitrary radix test (base 12)
181 ///////////////////////////////////////////////////////////////////////////
182 {
183 uint_generator<boost::uint32_t, 12> base12_generator;
184
185 BOOST_TEST(test("185616", base12_generator(424242)));
186 BOOST_TEST(test("185616", base12_generator, 424242));
187
188 BOOST_TEST(test(max_unsigned_base12, base12_generator(0xffffffffu)));
189 BOOST_TEST(test(max_unsigned_base12, base12_generator, 0xffffffffu));
190 }
191
192 ///////////////////////////////////////////////////////////////////////////
193 // arbitrary radix test (base 13)
194 ///////////////////////////////////////////////////////////////////////////
195 {
196 uint_generator<boost::uint32_t, 13> base13_generator;
197
198 BOOST_TEST(test("11b140", base13_generator(424242)));
199 BOOST_TEST(test("11b140", base13_generator, 424242));
200
201 BOOST_TEST(test(max_unsigned_base13, base13_generator(0xffffffffu)));
202 BOOST_TEST(test(max_unsigned_base13, base13_generator, 0xffffffffu));
203 }
204
205 ///////////////////////////////////////////////////////////////////////////
206 // arbitrary radix test (base 14)
207 ///////////////////////////////////////////////////////////////////////////
208 {
209 uint_generator<boost::uint32_t, 14> base14_generator;
210
211 BOOST_TEST(test("b0870", base14_generator(424242)));
212 BOOST_TEST(test("b0870", base14_generator, 424242));
213
214 BOOST_TEST(test(max_unsigned_base14, base14_generator(0xffffffffu)));
215 BOOST_TEST(test(max_unsigned_base14, base14_generator, 0xffffffffu));
216 }
217
218 ///////////////////////////////////////////////////////////////////////////
219 // arbitrary radix test (base 15)
220 ///////////////////////////////////////////////////////////////////////////
221 {
222 uint_generator<boost::uint32_t, 15> base15_generator;
223
224 BOOST_TEST(test("85a7c", base15_generator(424242)));
225 BOOST_TEST(test("85a7c", base15_generator, 424242));
226
227 BOOST_TEST(test(max_unsigned_base15, base15_generator(0xffffffffu)));
228 BOOST_TEST(test(max_unsigned_base15, base15_generator, 0xffffffffu));
229 }
230
231 ///////////////////////////////////////////////////////////////////////////
232 // arbitrary radix test (base 16)
233 ///////////////////////////////////////////////////////////////////////////
234 {
235 uint_generator<boost::uint32_t, 16> base16_generator;
236
237 BOOST_TEST(test("67932", base16_generator(424242)));
238 BOOST_TEST(test("67932", base16_generator, 424242));
239
240 BOOST_TEST(test(max_unsigned_base16, base16_generator(0xffffffffu)));
241 BOOST_TEST(test(max_unsigned_base16, base16_generator, 0xffffffffu));
242 }
243
244 ///////////////////////////////////////////////////////////////////////////
245 // arbitrary radix test (base 17)
246 ///////////////////////////////////////////////////////////////////////////
247 {
248 uint_generator<boost::uint32_t, 17> base17_generator;
249
250 BOOST_TEST(test("515g7", base17_generator(424242)));
251 BOOST_TEST(test("515g7", base17_generator, 424242));
252
253 BOOST_TEST(test(max_unsigned_base17, base17_generator(0xffffffffu)));
254 BOOST_TEST(test(max_unsigned_base17, base17_generator, 0xffffffffu));
255 }
256
257 ///////////////////////////////////////////////////////////////////////////
258 // arbitrary radix test (base 18)
259 ///////////////////////////////////////////////////////////////////////////
260 {
261 uint_generator<boost::uint32_t, 18> base18_generator;
262
263 BOOST_TEST(test("40d70", base18_generator(424242)));
264 BOOST_TEST(test("40d70", base18_generator, 424242));
265
266 BOOST_TEST(test(max_unsigned_base18, base18_generator(0xffffffffu)));
267 BOOST_TEST(test(max_unsigned_base18, base18_generator, 0xffffffffu));
268 }
269
270 ///////////////////////////////////////////////////////////////////////////
271 // arbitrary radix test (base 19)
272 ///////////////////////////////////////////////////////////////////////////
273 {
274 uint_generator<boost::uint32_t, 19> base19_generator;
275
276 BOOST_TEST(test("34g3a", base19_generator(424242)));
277 BOOST_TEST(test("34g3a", base19_generator, 424242));
278
279 BOOST_TEST(test(max_unsigned_base19, base19_generator(0xffffffffu)));
280 BOOST_TEST(test(max_unsigned_base19, base19_generator, 0xffffffffu));
281 }
282
283 ///////////////////////////////////////////////////////////////////////////
284 // arbitrary radix test (base 20)
285 ///////////////////////////////////////////////////////////////////////////
286 {
287 uint_generator<boost::uint32_t, 20> base20_generator;
288
289 BOOST_TEST(test("2d0c2", base20_generator(424242)));
290 BOOST_TEST(test("2d0c2", base20_generator, 424242));
291
292 BOOST_TEST(test(max_unsigned_base20, base20_generator(0xffffffffu)));
293 BOOST_TEST(test(max_unsigned_base20, base20_generator, 0xffffffffu));
294 }
295
296 ///////////////////////////////////////////////////////////////////////////
297 // arbitrary radix test (base 21)
298 ///////////////////////////////////////////////////////////////////////////
299 {
300 uint_generator<boost::uint32_t, 21> base21_generator;
301
302 BOOST_TEST(test("23h00", base21_generator(424242)));
303 BOOST_TEST(test("23h00", base21_generator, 424242));
304
305 BOOST_TEST(test(max_unsigned_base21, base21_generator(0xffffffffu)));
306 BOOST_TEST(test(max_unsigned_base21, base21_generator, 0xffffffffu));
307 }
308
309 ///////////////////////////////////////////////////////////////////////////
310 // arbitrary radix test (base 22)
311 ///////////////////////////////////////////////////////////////////////////
312 {
313 uint_generator<boost::uint32_t, 22> base22_generator;
314
315 BOOST_TEST(test("1hibg", base22_generator(424242)));
316 BOOST_TEST(test("1hibg", base22_generator, 424242));
317
318 BOOST_TEST(test(max_unsigned_base22, base22_generator(0xffffffffu)));
319 BOOST_TEST(test(max_unsigned_base22, base22_generator, 0xffffffffu));
320 }
321
322 ///////////////////////////////////////////////////////////////////////////
323 // arbitrary radix test (base 23)
324 ///////////////////////////////////////////////////////////////////////////
325 {
326 uint_generator<boost::uint32_t, 23> base23_generator;
327
328 BOOST_TEST(test("1bjm7", base23_generator(424242)));
329 BOOST_TEST(test("1bjm7", base23_generator, 424242));
330
331 BOOST_TEST(test(max_unsigned_base23, base23_generator(0xffffffffu)));
332 BOOST_TEST(test(max_unsigned_base23, base23_generator, 0xffffffffu));
333 }
334
335 ///////////////////////////////////////////////////////////////////////////
336 // arbitrary radix test (base 24)
337 ///////////////////////////////////////////////////////////////////////////
338 {
339 uint_generator<boost::uint32_t, 24> base24_generator;
340
341 BOOST_TEST(test("16gci", base24_generator(424242)));
342 BOOST_TEST(test("16gci", base24_generator, 424242));
343
344 BOOST_TEST(test(max_unsigned_base24, base24_generator(0xffffffffu)));
345 BOOST_TEST(test(max_unsigned_base24, base24_generator, 0xffffffffu));
346 }
347
348 ///////////////////////////////////////////////////////////////////////////
349 // arbitrary radix test (base 25)
350 ///////////////////////////////////////////////////////////////////////////
351 {
352 uint_generator<boost::uint32_t, 25> base25_generator;
353
354 BOOST_TEST(test("123jh", base25_generator(424242)));
355 BOOST_TEST(test("123jh", base25_generator, 424242));
356
357 BOOST_TEST(test(max_unsigned_base25, base25_generator(0xffffffffu)));
358 BOOST_TEST(test(max_unsigned_base25, base25_generator, 0xffffffffu));
359 }
360
361 ///////////////////////////////////////////////////////////////////////////
362 // arbitrary radix test (base 26)
363 ///////////////////////////////////////////////////////////////////////////
364 {
365 uint_generator<boost::uint32_t, 26> base26_generator;
366
367 BOOST_TEST(test("o3f0", base26_generator(424242)));
368 BOOST_TEST(test("o3f0", base26_generator, 424242));
369
370 BOOST_TEST(test(max_unsigned_base26, base26_generator(0xffffffffu)));
371 BOOST_TEST(test(max_unsigned_base26, base26_generator, 0xffffffffu));
372 }
373
374 ///////////////////////////////////////////////////////////////////////////
375 // arbitrary radix test (base 27)
376 ///////////////////////////////////////////////////////////////////////////
377 {
378 uint_generator<boost::uint32_t, 27> base27_generator;
379
380 BOOST_TEST(test("lepi", base27_generator(424242)));
381 BOOST_TEST(test("lepi", base27_generator, 424242));
382
383 BOOST_TEST(test(max_unsigned_base27, base27_generator(0xffffffffu)));
384 BOOST_TEST(test(max_unsigned_base27, base27_generator, 0xffffffffu));
385 }
386
387 ///////////////////////////////////////////////////////////////////////////
388 // arbitrary radix test (base 28)
389 ///////////////////////////////////////////////////////////////////////////
390 {
391 uint_generator<boost::uint32_t, 28> base28_generator;
392
393 BOOST_TEST(test("j93e", base28_generator(424242)));
394 BOOST_TEST(test("j93e", base28_generator, 424242));
395
396 BOOST_TEST(test(max_unsigned_base28, base28_generator(0xffffffffu)));
397 BOOST_TEST(test(max_unsigned_base28, base28_generator, 0xffffffffu));
398 }
399
400 ///////////////////////////////////////////////////////////////////////////
401 // arbitrary radix test (base 29)
402 ///////////////////////////////////////////////////////////////////////////
403 {
404 uint_generator<boost::uint32_t, 29> base29_generator;
405
406 BOOST_TEST(test("hbd1", base29_generator(424242)));
407 BOOST_TEST(test("hbd1", base29_generator, 424242));
408
409 BOOST_TEST(test(max_unsigned_base29, base29_generator(0xffffffffu)));
410 BOOST_TEST(test(max_unsigned_base29, base29_generator, 0xffffffffu));
411 }
412
413 ///////////////////////////////////////////////////////////////////////////
414 // arbitrary radix test (base 30)
415 ///////////////////////////////////////////////////////////////////////////
416 {
417 uint_generator<boost::uint32_t, 30> base30_generator;
418
419 BOOST_TEST(test("flbc", base30_generator(424242)));
420 BOOST_TEST(test("flbc", base30_generator, 424242));
421
422 BOOST_TEST(test(max_unsigned_base30, base30_generator(0xffffffffu)));
423 BOOST_TEST(test(max_unsigned_base30, base30_generator, 0xffffffffu));
424 }
425
426 ///////////////////////////////////////////////////////////////////////////
427 // arbitrary radix test (base 31)
428 ///////////////////////////////////////////////////////////////////////////
429 {
430 uint_generator<boost::uint32_t, 31> base31_generator;
431
432 BOOST_TEST(test("e7e7", base31_generator(424242)));
433 BOOST_TEST(test("e7e7", base31_generator, 424242));
434
435 BOOST_TEST(test(max_unsigned_base31, base31_generator(0xffffffffu)));
436 BOOST_TEST(test(max_unsigned_base31, base31_generator, 0xffffffffu));
437 }
438
439 ///////////////////////////////////////////////////////////////////////////
440 // arbitrary radix test (base 32)
441 ///////////////////////////////////////////////////////////////////////////
442 {
443 uint_generator<boost::uint32_t, 32> base32_generator;
444
445 BOOST_TEST(test("cu9i", base32_generator(424242)));
446 BOOST_TEST(test("cu9i", base32_generator, 424242));
447
448 BOOST_TEST(test(max_unsigned_base32, base32_generator(0xffffffffu)));
449 BOOST_TEST(test(max_unsigned_base32, base32_generator, 0xffffffffu));
450 }
451
452 ///////////////////////////////////////////////////////////////////////////
453 // arbitrary radix test (base 33)
454 ///////////////////////////////////////////////////////////////////////////
455 {
456 uint_generator<boost::uint32_t, 33> base33_generator;
457
458 BOOST_TEST(test("bqir", base33_generator(424242)));
459 BOOST_TEST(test("bqir", base33_generator, 424242));
460
461 BOOST_TEST(test(max_unsigned_base33, base33_generator(0xffffffffu)));
462 BOOST_TEST(test(max_unsigned_base33, base33_generator, 0xffffffffu));
463 }
464
465 ///////////////////////////////////////////////////////////////////////////
466 // arbitrary radix test (base 34)
467 ///////////////////////////////////////////////////////////////////////////
468 {
469 uint_generator<boost::uint32_t, 34> base34_generator;
470
471 BOOST_TEST(test("aqxo", base34_generator(424242)));
472 BOOST_TEST(test("aqxo", base34_generator, 424242));
473
474 BOOST_TEST(test(max_unsigned_base34, base34_generator(0xffffffffu)));
475 BOOST_TEST(test(max_unsigned_base34, base34_generator, 0xffffffffu));
476 }
477
478 ///////////////////////////////////////////////////////////////////////////
479 // arbitrary radix test (base 35)
480 ///////////////////////////////////////////////////////////////////////////
481 {
482 uint_generator<boost::uint32_t, 35> base35_generator;
483
484 BOOST_TEST(test("9vb7", base35_generator(424242)));
485 BOOST_TEST(test("9vb7", base35_generator, 424242));
486
487 BOOST_TEST(test(max_unsigned_base35, base35_generator(0xffffffffu)));
488 BOOST_TEST(test(max_unsigned_base35, base35_generator, 0xffffffffu));
489 }
490
491 ///////////////////////////////////////////////////////////////////////////
492 // arbitrary radix test (base 36)
493 ///////////////////////////////////////////////////////////////////////////
494 {
495 uint_generator<boost::uint32_t, 36> base36_generator;
496
497 BOOST_TEST(test("93ci", base36_generator(424242)));
498 BOOST_TEST(test("93ci", base36_generator, 424242));
499
500 BOOST_TEST(test(max_unsigned_base36, base36_generator(0xffffffffu)));
501 BOOST_TEST(test(max_unsigned_base36, base36_generator, 0xffffffffu));
502 }
503
504 return boost::report_errors();
505}
506

source code of boost/libs/spirit/test/karma/uint_radix.cpp