@@ -681,6 +681,57 @@ TEST_CASE("decimal_point_parsing") {
681681 }
682682}
683683
684+ TEST_CASE (" digit_separator" ) {
685+ double result;
686+ fast_float::parse_options options{};
687+ options.digit_separator = ' _' ;
688+ {
689+ std::string const input = " 1_000" ;
690+ auto answer = fast_float::from_chars_advanced (
691+ input.data (), input.data () + input.size (), result, options);
692+ CHECK_MESSAGE (answer.ec == std::errc (), " expected parse success" );
693+ CHECK_MESSAGE (answer.ptr == input.data () + input.size (),
694+ " Parsing should have stopped at end" );
695+ CHECK_EQ (result, 1000.0 );
696+ }
697+ {
698+ std::string const input = " 1.00_5" ;
699+ auto answer = fast_float::from_chars_advanced (
700+ input.data (), input.data () + input.size (), result, options);
701+ CHECK_MESSAGE (answer.ec == std::errc (), " expected parse success" );
702+ CHECK_MESSAGE (answer.ptr == input.data () + input.size (),
703+ " Parsing should have stopped at end" );
704+ CHECK_EQ (result, 1.005 );
705+ }
706+ {
707+ std::string const input = " 1e1_0" ;
708+ auto answer = fast_float::from_chars_advanced (
709+ input.data (), input.data () + input.size (), result, options);
710+ CHECK_MESSAGE (answer.ec == std::errc (), " expected parse success" );
711+ CHECK_MESSAGE (answer.ptr == input.data () + input.size (),
712+ " Parsing should have stopped at end" );
713+ CHECK_EQ (result, 1e10 );
714+ }
715+ {
716+ std::string const input = " 1_5e1_2" ;
717+ auto answer = fast_float::from_chars_advanced (
718+ input.data (), input.data () + input.size (), result, options);
719+ CHECK_MESSAGE (answer.ec == std::errc (), " expected parse success" );
720+ CHECK_MESSAGE (answer.ptr == input.data () + input.size (),
721+ " Parsing should have stopped at end" );
722+ CHECK_EQ (result, 15e12 );
723+ }
724+ {
725+ std::string const input = " 1_5.0_5e1_2" ;
726+ auto answer = fast_float::from_chars_advanced (
727+ input.data (), input.data () + input.size (), result, options);
728+ CHECK_MESSAGE (answer.ec == std::errc (), " expected parse success" );
729+ CHECK_MESSAGE (answer.ptr == input.data () + input.size (),
730+ " Parsing should have stopped at end" );
731+ CHECK_EQ (result, 15.05e12 );
732+ }
733+ }
734+
684735TEST_CASE (" issue19" ) {
685736 std::string const input = " 234532.3426362,7869234.9823,324562.645" ;
686737 double result;
@@ -2452,4 +2503,4 @@ TEST_CASE("integer_times_pow10") {
24522503 all::verify_integer_times_pow10 (std::numeric_limits<uint64_t >::max (), 42 );
24532504 all::verify_integer_times_pow10 (std::numeric_limits<uint64_t >::max (), -42 );
24542505 }
2455- }
2506+ }
0 commit comments