Skip to content

Commit c3b634e

Browse files
committed
Add test cases for digit separators
1 parent a6c8710 commit c3b634e

1 file changed

Lines changed: 52 additions & 1 deletion

File tree

tests/basictest.cpp

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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+
684735
TEST_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

Comments
 (0)