1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Rename parse to tryParse, add throwing version, return views for split

This commit is contained in:
ζeh Matt
2025-09-28 23:07:29 +03:00
parent 725b3782bd
commit 9eeaf9a001
4 changed files with 63 additions and 34 deletions

View File

@@ -66,17 +66,17 @@ TEST_P(StringTest, TrimStart)
TEST_F(StringTest, Split_ByComma)
{
auto actual = String::split("a,bb,ccc,dd", ",");
AssertVector<std::string>(actual, { "a", "bb", "ccc", "dd" });
AssertVector<std::string_view>(actual, { "a", "bb", "ccc", "dd" });
}
TEST_F(StringTest, Split_ByColonColon)
{
auto actual = String::split("a::bb:ccc:::::dd", "::");
AssertVector<std::string>(actual, { "a", "bb:ccc", "", ":dd" });
AssertVector<std::string_view>(actual, { "a", "bb:ccc", "", ":dd" });
}
TEST_F(StringTest, Split_Empty)
{
auto actual = String::split("", ".");
AssertVector<std::string>(actual, {});
AssertVector<std::string_view>(actual, {});
}
TEST_F(StringTest, Split_ByEmpty)
{
@@ -294,153 +294,153 @@ TEST_F(StringTest, LogicalCompare)
TEST_F(StringTest, Parse_Basic)
{
auto actual = String::parse<std::int32_t>("123");
auto actual = String::tryParse<std::int32_t>("123");
ASSERT_TRUE(actual.has_value());
ASSERT_EQ(*actual, 123);
}
TEST_F(StringTest, Parse_Empty)
{
auto actual = String::parse<std::int32_t>("");
auto actual = String::tryParse<std::int32_t>("");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_Zero)
{
auto actual = String::parse<std::int32_t>("0");
auto actual = String::tryParse<std::int32_t>("0");
ASSERT_TRUE(actual.has_value());
ASSERT_EQ(*actual, 0);
}
TEST_F(StringTest, Parse_LeadingZero)
{
auto actual = String::parse<std::int32_t>("00123");
auto actual = String::tryParse<std::int32_t>("00123");
ASSERT_TRUE(actual.has_value());
ASSERT_EQ(*actual, 123);
}
TEST_F(StringTest, Parse_InvalidChar)
{
auto actual = String::parse<std::int32_t>("12a3");
auto actual = String::tryParse<std::int32_t>("12a3");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_LeadingNonDigit)
{
auto actual = String::parse<std::int32_t>("a123");
auto actual = String::tryParse<std::int32_t>("a123");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_Negative)
{
auto actual = String::parse<std::int32_t>("-123");
auto actual = String::tryParse<std::int32_t>("-123");
ASSERT_TRUE(actual.has_value());
ASSERT_EQ(*actual, -123);
}
TEST_F(StringTest, Parse_Overflow)
{
auto actual = String::parse<std::int32_t>("2147483648");
auto actual = String::tryParse<std::int32_t>("2147483648");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_LargeNumber)
{
auto actual = String::parse<std::int64_t>("9223372036854775807");
auto actual = String::tryParse<std::int64_t>("9223372036854775807");
ASSERT_TRUE(actual.has_value());
ASSERT_EQ(*actual, 9223372036854775807LL);
}
TEST_F(StringTest, Parse_FloatBasic)
{
auto actual = String::parse<float>("123.45");
auto actual = String::tryParse<float>("123.45");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, 123.45f);
}
TEST_F(StringTest, Parse_FloatZero)
{
auto actual = String::parse<float>("0.0");
auto actual = String::tryParse<float>("0.0");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, 0.0f);
}
TEST_F(StringTest, Parse_FloatScientific)
{
auto actual = String::parse<float>("1.23e4");
auto actual = String::tryParse<float>("1.23e4");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, 12300.0f);
}
TEST_F(StringTest, Parse_FloatInvalid)
{
auto actual = String::parse<float>("123.4a5");
auto actual = String::tryParse<float>("123.4a5");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_FloatLeadingDot)
{
auto actual = String::parse<float>(".123");
auto actual = String::tryParse<float>(".123");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, 0.123f);
}
TEST_F(StringTest, Parse_FloatNegative)
{
auto actual = String::parse<float>("-123.45");
auto actual = String::tryParse<float>("-123.45");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, -123.45f);
}
TEST_F(StringTest, Parse_FloatOverflow)
{
auto actual = String::parse<float>("3.4028235e39");
auto actual = String::tryParse<float>("3.4028235e39");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_DoubleBasic)
{
auto actual = String::parse<double>("123.456789");
auto actual = String::tryParse<double>("123.456789");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, 123.456789);
}
TEST_F(StringTest, Parse_DoubleZero)
{
auto actual = String::parse<double>("0.0");
auto actual = String::tryParse<double>("0.0");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, 0.0);
}
TEST_F(StringTest, Parse_DoubleScientific)
{
auto actual = String::parse<double>("1.23e10");
auto actual = String::tryParse<double>("1.23e10");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, 12300000000.0);
}
TEST_F(StringTest, Parse_DoubleInvalid)
{
auto actual = String::parse<double>("123.4a5");
auto actual = String::tryParse<double>("123.4a5");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_DoubleLeadingDot)
{
auto actual = String::parse<double>(".123");
auto actual = String::tryParse<double>(".123");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, 0.123);
}
TEST_F(StringTest, Parse_DoubleNegative)
{
auto actual = String::parse<double>("-123.45");
auto actual = String::tryParse<double>("-123.45");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, -123.45);
}
TEST_F(StringTest, Parse_DoubleOverflow)
{
auto actual = String::parse<double>("1.7976931348623158e309");
auto actual = String::tryParse<double>("1.7976931348623158e309");
ASSERT_FALSE(actual.has_value());
}