Skip to content
Prev Previous commit
Next Next commit
Add test cases for digit separators
  • Loading branch information
zaewc committed Feb 24, 2026
commit c3b634e24f5a515212dc86d79860fa5be519bc38
53 changes: 52 additions & 1 deletion tests/basictest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -681,6 +681,57 @@ TEST_CASE("decimal_point_parsing") {
}
}

TEST_CASE("digit_separator") {
double result;
fast_float::parse_options options{};
options.digit_separator = '_';
{
std::string const input = "1_000";
auto answer = fast_float::from_chars_advanced(
input.data(), input.data() + input.size(), result, options);
CHECK_MESSAGE(answer.ec == std::errc(), "expected parse success");
CHECK_MESSAGE(answer.ptr == input.data() + input.size(),
"Parsing should have stopped at end");
CHECK_EQ(result, 1000.0);
}
{
std::string const input = "1.00_5";
auto answer = fast_float::from_chars_advanced(
input.data(), input.data() + input.size(), result, options);
CHECK_MESSAGE(answer.ec == std::errc(), "expected parse success");
CHECK_MESSAGE(answer.ptr == input.data() + input.size(),
"Parsing should have stopped at end");
CHECK_EQ(result, 1.005);
}
{
std::string const input = "1e1_0";
auto answer = fast_float::from_chars_advanced(
input.data(), input.data() + input.size(), result, options);
CHECK_MESSAGE(answer.ec == std::errc(), "expected parse success");
CHECK_MESSAGE(answer.ptr == input.data() + input.size(),
"Parsing should have stopped at end");
CHECK_EQ(result, 1e10);
}
{
std::string const input = "1_5e1_2";
auto answer = fast_float::from_chars_advanced(
input.data(), input.data() + input.size(), result, options);
CHECK_MESSAGE(answer.ec == std::errc(), "expected parse success");
CHECK_MESSAGE(answer.ptr == input.data() + input.size(),
"Parsing should have stopped at end");
CHECK_EQ(result, 15e12);
}
{
std::string const input = "1_5.0_5e1_2";
auto answer = fast_float::from_chars_advanced(
input.data(), input.data() + input.size(), result, options);
CHECK_MESSAGE(answer.ec == std::errc(), "expected parse success");
CHECK_MESSAGE(answer.ptr == input.data() + input.size(),
"Parsing should have stopped at end");
CHECK_EQ(result, 15.05e12);
}
}

TEST_CASE("issue19") {
std::string const input = "234532.3426362,7869234.9823,324562.645";
double result;
Expand Down Expand Up @@ -2452,4 +2503,4 @@ TEST_CASE("integer_times_pow10") {
all::verify_integer_times_pow10(std::numeric_limits<uint64_t>::max(), 42);
all::verify_integer_times_pow10(std::numeric_limits<uint64_t>::max(), -42);
}
}
}