aboutsummaryrefslogtreecommitdiff
path: root/test/base/StringUtilTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/base/StringUtilTest.cpp')
-rw-r--r--test/base/StringUtilTest.cpp112
1 files changed, 112 insertions, 0 deletions
diff --git a/test/base/StringUtilTest.cpp b/test/base/StringUtilTest.cpp
index 3ce4cff1..5951531d 100644
--- a/test/base/StringUtilTest.cpp
+++ b/test/base/StringUtilTest.cpp
@@ -101,6 +101,118 @@ TEST_CASE("StringUtil Utf16CodePointIterator", "[string]") {
REQUIRE(code_points == expected_code_points);
}
+TEST_CASE("ParseToNumber Work", "[string]") {
+ using namespace cru::string;
+
+ auto r1 = ParseToNumber<int>("123");
+ REQUIRE(r1.valid);
+ REQUIRE(r1.value == 123);
+ REQUIRE(r1.processed_char_count == 3);
+
+ auto r2 = ParseToNumber<int>("123.123");
+ REQUIRE(!r2.valid);
+
+ auto r3 = ParseToNumber<float>("123.123");
+ REQUIRE(r3.valid);
+ REQUIRE(r3.value == 123.123f);
+ REQUIRE(r3.processed_char_count == 7);
+
+ auto r4 = ParseToNumber<float>("a123");
+ REQUIRE(!r4.valid);
+}
+
+TEST_CASE("ParseToNumber AllowLeadingZeroFlag", "[string]") {
+ using namespace cru::string;
+
+ auto r1 = ParseToNumber<int>(" 123");
+ REQUIRE(!r1.valid);
+
+ auto r2 = ParseToNumber<int>(" 123", ParseToNumberFlags::AllowLeadingSpaces);
+ REQUIRE(r2.valid);
+ REQUIRE(r2.value == 123);
+ REQUIRE(r2.processed_char_count == 5);
+
+ auto r3 = ParseToNumber<float>(" 123.123");
+ REQUIRE(!r3.valid);
+
+ auto r4 =
+ ParseToNumber<float>(" 123.123", ParseToNumberFlags::AllowLeadingSpaces);
+ REQUIRE(r4.valid);
+ REQUIRE(r4.value == 123.123f);
+ REQUIRE(r4.processed_char_count == 9);
+}
+
+TEST_CASE("StringToIntegerConverterImpl AllowTrailingSpacesFlag", "[string]") {
+ using namespace cru::string;
+
+ auto r1 = ParseToNumber<int>("123 ");
+ REQUIRE(!r1.valid);
+
+ auto r2 =
+ ParseToNumber<int>("123 ", ParseToNumberFlags::AllowTrailingSpaces);
+ REQUIRE(r2.valid);
+ REQUIRE(r2.value == 123);
+ REQUIRE(r2.processed_char_count == 3);
+
+ auto r3 = ParseToNumber<float>("123.123 ");
+ REQUIRE(!r3.valid);
+
+ auto r4 = ParseToNumber<float>("123.123 ",
+ ParseToNumberFlags::AllowTrailingSpaces);
+ REQUIRE(r4.valid);
+ REQUIRE(r4.value == 123.123f);
+ REQUIRE(r4.processed_char_count == 7);
+}
+
+TEST_CASE("StringToIntegerConverterImpl AllowTrailingJunk", "[string]") {
+ using namespace cru::string;
+
+ auto r1 = ParseToNumber<int>("123ab");
+ REQUIRE(!r1.valid);
+
+ auto r2 = ParseToNumber<int>("123ab", ParseToNumberFlags::AllowTrailingJunk);
+ REQUIRE(r2.valid);
+ REQUIRE(r2.value == 123);
+ REQUIRE(r2.processed_char_count == 3);
+
+ auto r3 = ParseToNumber<float>("123.123ab");
+ REQUIRE(!r3.valid);
+
+ auto r4 =
+ ParseToNumber<float>("123.123ab", ParseToNumberFlags::AllowTrailingJunk);
+ REQUIRE(r4.valid);
+ REQUIRE(r4.value == 123.123f);
+ REQUIRE(r4.processed_char_count == 7);
+}
+
+TEST_CASE("StringToIntegerConverterImpl CompositeFlags", "[string]") {
+ using namespace cru::string;
+
+ auto r1 =
+ ParseToNumber<int>(" 123ab", ParseToNumberFlags::AllowLeadingSpaces |
+ ParseToNumberFlags::AllowTrailingJunk);
+ REQUIRE(r1.valid);
+ REQUIRE(r1.value == 123);
+ REQUIRE(r1.processed_char_count == 5);
+
+ auto r2 = ParseToNumber<float>(" 123.123ab",
+ ParseToNumberFlags::AllowLeadingSpaces |
+ ParseToNumberFlags::AllowTrailingJunk);
+ REQUIRE(r2.valid);
+ REQUIRE(r2.value == 123.123f);
+ REQUIRE(r2.processed_char_count == 9);
+}
+
+TEST_CASE("String ParseToNumberList", "[string]") {
+ using namespace cru::string;
+
+ auto r1 = ParseToNumberList<int>("123 456 789");
+ REQUIRE(r1 == std::vector<int>{123, 456, 789});
+
+ auto r2 = ParseToNumberList<float>("1.1 2.2 3.3");
+ REQUIRE(r2 == std::vector<float>{1.1f, 2.2f, 3.3f});
+}
+
// TEST(WinString, IndexUtf8ToUtf16) {
// using cru::platform::win::IndexUtf8ToUtf16;
// std::string_view utf8_string = "aπ你🤣!";