@@ -418,4 +418,70 @@ BOOST_AUTO_TEST_CASE(test_FormatSubVersion)
418418 BOOST_CHECK_EQUAL (FormatSubVersion (" Test" , 99900 , comments),std::string (" /Test:0.9.99(comment1)/" ));
419419 BOOST_CHECK_EQUAL (FormatSubVersion (" Test" , 99900 , comments2),std::string (" /Test:0.9.99(comment1; comment2)/" ));
420420}
421+
422+ BOOST_AUTO_TEST_CASE (test_ParseFixedPoint)
423+ {
424+ int64_t amount = 0 ;
425+ BOOST_CHECK (ParseFixedPoint (" 0" , 8 , &amount));
426+ BOOST_CHECK_EQUAL (amount, 0LL );
427+ BOOST_CHECK (ParseFixedPoint (" 1" , 8 , &amount));
428+ BOOST_CHECK_EQUAL (amount, 100000000LL );
429+ BOOST_CHECK (ParseFixedPoint (" 0.0" , 8 , &amount));
430+ BOOST_CHECK_EQUAL (amount, 0LL );
431+ BOOST_CHECK (ParseFixedPoint (" -0.1" , 8 , &amount));
432+ BOOST_CHECK_EQUAL (amount, -10000000LL );
433+ BOOST_CHECK (ParseFixedPoint (" 1.1" , 8 , &amount));
434+ BOOST_CHECK_EQUAL (amount, 110000000LL );
435+ BOOST_CHECK (ParseFixedPoint (" 1.10000000000000000" , 8 , &amount));
436+ BOOST_CHECK_EQUAL (amount, 110000000LL );
437+ BOOST_CHECK (ParseFixedPoint (" 1.1e1" , 8 , &amount));
438+ BOOST_CHECK_EQUAL (amount, 1100000000LL );
439+ BOOST_CHECK (ParseFixedPoint (" 1.1e-1" , 8 , &amount));
440+ BOOST_CHECK_EQUAL (amount, 11000000LL );
441+ BOOST_CHECK (ParseFixedPoint (" 1000" , 8 , &amount));
442+ BOOST_CHECK_EQUAL (amount, 100000000000LL );
443+ BOOST_CHECK (ParseFixedPoint (" -1000" , 8 , &amount));
444+ BOOST_CHECK_EQUAL (amount, -100000000000LL );
445+ BOOST_CHECK (ParseFixedPoint (" 0.00000001" , 8 , &amount));
446+ BOOST_CHECK_EQUAL (amount, 1LL );
447+ BOOST_CHECK (ParseFixedPoint (" 0.0000000100000000" , 8 , &amount));
448+ BOOST_CHECK_EQUAL (amount, 1LL );
449+ BOOST_CHECK (ParseFixedPoint (" -0.00000001" , 8 , &amount));
450+ BOOST_CHECK_EQUAL (amount, -1LL );
451+ BOOST_CHECK (ParseFixedPoint (" 1000000000.00000001" , 8 , &amount));
452+ BOOST_CHECK_EQUAL (amount, 100000000000000001LL );
453+ BOOST_CHECK (ParseFixedPoint (" 9999999999.99999999" , 8 , &amount));
454+ BOOST_CHECK_EQUAL (amount, 999999999999999999LL );
455+ BOOST_CHECK (ParseFixedPoint (" -9999999999.99999999" , 8 , &amount));
456+ BOOST_CHECK_EQUAL (amount, -999999999999999999LL );
457+
458+ BOOST_CHECK (!ParseFixedPoint (" " , 8 , &amount));
459+ BOOST_CHECK (!ParseFixedPoint (" -" , 8 , &amount));
460+ BOOST_CHECK (!ParseFixedPoint (" a-1000" , 8 , &amount));
461+ BOOST_CHECK (!ParseFixedPoint (" -a1000" , 8 , &amount));
462+ BOOST_CHECK (!ParseFixedPoint (" -1000a" , 8 , &amount));
463+ BOOST_CHECK (!ParseFixedPoint (" -01000" , 8 , &amount));
464+ BOOST_CHECK (!ParseFixedPoint (" 00.1" , 8 , &amount));
465+ BOOST_CHECK (!ParseFixedPoint (" .1" , 8 , &amount));
466+ BOOST_CHECK (!ParseFixedPoint (" --0.1" , 8 , &amount));
467+ BOOST_CHECK (!ParseFixedPoint (" 0.000000001" , 8 , &amount));
468+ BOOST_CHECK (!ParseFixedPoint (" -0.000000001" , 8 , &amount));
469+ BOOST_CHECK (!ParseFixedPoint (" 0.00000001000000001" , 8 , &amount));
470+ BOOST_CHECK (!ParseFixedPoint (" -10000000000.00000000" , 8 , &amount));
471+ BOOST_CHECK (!ParseFixedPoint (" 10000000000.00000000" , 8 , &amount));
472+ BOOST_CHECK (!ParseFixedPoint (" -10000000000.00000001" , 8 , &amount));
473+ BOOST_CHECK (!ParseFixedPoint (" 10000000000.00000001" , 8 , &amount));
474+ BOOST_CHECK (!ParseFixedPoint (" -10000000000.00000009" , 8 , &amount));
475+ BOOST_CHECK (!ParseFixedPoint (" 10000000000.00000009" , 8 , &amount));
476+ BOOST_CHECK (!ParseFixedPoint (" -99999999999.99999999" , 8 , &amount));
477+ BOOST_CHECK (!ParseFixedPoint (" 99999909999.09999999" , 8 , &amount));
478+ BOOST_CHECK (!ParseFixedPoint (" 92233720368.54775807" , 8 , &amount));
479+ BOOST_CHECK (!ParseFixedPoint (" 92233720368.54775808" , 8 , &amount));
480+ BOOST_CHECK (!ParseFixedPoint (" -92233720368.54775808" , 8 , &amount));
481+ BOOST_CHECK (!ParseFixedPoint (" -92233720368.54775809" , 8 , &amount));
482+ BOOST_CHECK (!ParseFixedPoint (" 1.1e" , 8 , &amount));
483+ BOOST_CHECK (!ParseFixedPoint (" 1.1e-" , 8 , &amount));
484+ BOOST_CHECK (!ParseFixedPoint (" 1." , 8 , &amount));
485+ }
486+
421487BOOST_AUTO_TEST_SUITE_END ()
0 commit comments