From c3b634e24f5a515212dc86d79860fa5be519bc38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9E=AC=EC=9A=B1?= Date: Tue, 24 Feb 2026 11:00:09 +0900 Subject: [PATCH] Add test cases for digit separators --- tests/basictest.cpp | 53 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/tests/basictest.cpp b/tests/basictest.cpp index dba36e8..8fbd680 100644 --- a/tests/basictest.cpp +++ b/tests/basictest.cpp @@ -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; @@ -2452,4 +2503,4 @@ TEST_CASE("integer_times_pow10") { all::verify_integer_times_pow10(std::numeric_limits::max(), 42); all::verify_integer_times_pow10(std::numeric_limits::max(), -42); } -} \ No newline at end of file +}