@@ -376,6 +376,69 @@ BOOST_AUTO_TEST_CASE(test_ParseInt64)
376
376
BOOST_CHECK (!ParseInt64 (" 32482348723847471234" , NULL ));
377
377
}
378
378
379
+ BOOST_AUTO_TEST_CASE (test_ParseUInt32)
380
+ {
381
+ uint32_t n;
382
+ // Valid values
383
+ BOOST_CHECK (ParseUInt32 (" 1234" , NULL ));
384
+ BOOST_CHECK (ParseUInt32 (" 0" , &n) && n == 0 );
385
+ BOOST_CHECK (ParseUInt32 (" 1234" , &n) && n == 1234 );
386
+ BOOST_CHECK (ParseUInt32 (" 01234" , &n) && n == 1234 ); // no octal
387
+ BOOST_CHECK (ParseUInt32 (" 2147483647" , &n) && n == 2147483647 );
388
+ BOOST_CHECK (ParseUInt32 (" 2147483648" , &n) && n == (uint32_t )2147483648 );
389
+ BOOST_CHECK (ParseUInt32 (" 4294967295" , &n) && n == (uint32_t )4294967295 );
390
+ // Invalid values
391
+ BOOST_CHECK (!ParseUInt32 (" " , &n));
392
+ BOOST_CHECK (!ParseUInt32 (" 1" , &n)); // no padding inside
393
+ BOOST_CHECK (!ParseUInt32 (" -1" , &n));
394
+ BOOST_CHECK (!ParseUInt32 (" 1 " , &n));
395
+ BOOST_CHECK (!ParseUInt32 (" 1a" , &n));
396
+ BOOST_CHECK (!ParseUInt32 (" aap" , &n));
397
+ BOOST_CHECK (!ParseUInt32 (" 0x1" , &n)); // no hex
398
+ BOOST_CHECK (!ParseUInt32 (" 0x1" , &n)); // no hex
399
+ const char test_bytes[] = {' 1' , 0 , ' 1' };
400
+ std::string teststr (test_bytes, sizeof (test_bytes));
401
+ BOOST_CHECK (!ParseUInt32 (teststr, &n)); // no embedded NULs
402
+ // Overflow and underflow
403
+ BOOST_CHECK (!ParseUInt32 (" -2147483648" , &n));
404
+ BOOST_CHECK (!ParseUInt32 (" 4294967296" , &n));
405
+ BOOST_CHECK (!ParseUInt32 (" -1234" , &n));
406
+ BOOST_CHECK (!ParseUInt32 (" -32482348723847471234" , NULL ));
407
+ BOOST_CHECK (!ParseUInt32 (" 32482348723847471234" , NULL ));
408
+ }
409
+
410
+ BOOST_AUTO_TEST_CASE (test_ParseUInt64)
411
+ {
412
+ uint64_t n;
413
+ // Valid values
414
+ BOOST_CHECK (ParseUInt64 (" 1234" , NULL ));
415
+ BOOST_CHECK (ParseUInt64 (" 0" , &n) && n == 0LL );
416
+ BOOST_CHECK (ParseUInt64 (" 1234" , &n) && n == 1234LL );
417
+ BOOST_CHECK (ParseUInt64 (" 01234" , &n) && n == 1234LL ); // no octal
418
+ BOOST_CHECK (ParseUInt64 (" 2147483647" , &n) && n == 2147483647LL );
419
+ BOOST_CHECK (ParseUInt64 (" 9223372036854775807" , &n) && n == 9223372036854775807ULL );
420
+ BOOST_CHECK (ParseUInt64 (" 9223372036854775808" , &n) && n == 9223372036854775808ULL );
421
+ BOOST_CHECK (ParseUInt64 (" 18446744073709551615" , &n) && n == 18446744073709551615ULL );
422
+ // Invalid values
423
+ BOOST_CHECK (!ParseUInt64 (" " , &n));
424
+ BOOST_CHECK (!ParseUInt64 (" 1" , &n)); // no padding inside
425
+ BOOST_CHECK (!ParseUInt64 (" -1" , &n));
426
+ BOOST_CHECK (!ParseUInt64 (" 1 " , &n));
427
+ BOOST_CHECK (!ParseUInt64 (" 1a" , &n));
428
+ BOOST_CHECK (!ParseUInt64 (" aap" , &n));
429
+ BOOST_CHECK (!ParseUInt64 (" 0x1" , &n)); // no hex
430
+ const char test_bytes[] = {' 1' , 0 , ' 1' };
431
+ std::string teststr (test_bytes, sizeof (test_bytes));
432
+ BOOST_CHECK (!ParseUInt64 (teststr, &n)); // no embedded NULs
433
+ // Overflow and underflow
434
+ BOOST_CHECK (!ParseUInt64 (" -9223372036854775809" , NULL ));
435
+ BOOST_CHECK (!ParseUInt64 (" 18446744073709551616" , NULL ));
436
+ BOOST_CHECK (!ParseUInt64 (" -32482348723847471234" , NULL ));
437
+ BOOST_CHECK (!ParseUInt64 (" -2147483648" , &n));
438
+ BOOST_CHECK (!ParseUInt64 (" -9223372036854775808" , &n));
439
+ BOOST_CHECK (!ParseUInt64 (" -1234" , &n));
440
+ }
441
+
379
442
BOOST_AUTO_TEST_CASE (test_ParseDouble)
380
443
{
381
444
double n;
0 commit comments