1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-10 09:32:29 +01:00

Parsing floats/doubles currently unsupported

This commit is contained in:
ζeh Matt
2025-09-29 13:12:24 +03:00
parent 6457eca67c
commit 518a75f30d
2 changed files with 4 additions and 94 deletions

View File

@@ -116,6 +116,8 @@ namespace OpenRCT2::String
template<typename T>
inline std::optional<T> tryParse(std::string_view input)
{
static_assert(!std::is_same_v<T, float> && !std::is_same_v<T, double>, "Float support is currently unsupported");
if (input.empty())
{
return std::nullopt;
@@ -132,6 +134,8 @@ namespace OpenRCT2::String
template<typename T>
inline T parse(std::string_view input)
{
static_assert(!std::is_same_v<T, float> && !std::is_same_v<T, double>, "Float support is currently unsupported");
if (input.empty())
{
throw std::invalid_argument("Input is empty");

View File

@@ -350,97 +350,3 @@ TEST_F(StringTest, Parse_LargeNumber)
ASSERT_TRUE(actual.has_value());
ASSERT_EQ(*actual, 9223372036854775807LL);
}
TEST_F(StringTest, Parse_FloatBasic)
{
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::tryParse<float>("0.0");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, 0.0f);
}
TEST_F(StringTest, Parse_FloatScientific)
{
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::tryParse<float>("123.4a5");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_FloatLeadingDot)
{
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::tryParse<float>("-123.45");
ASSERT_TRUE(actual.has_value());
ASSERT_FLOAT_EQ(*actual, -123.45f);
}
TEST_F(StringTest, Parse_FloatOverflow)
{
auto actual = String::tryParse<float>("3.4028235e39");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_DoubleBasic)
{
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::tryParse<double>("0.0");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, 0.0);
}
TEST_F(StringTest, Parse_DoubleScientific)
{
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::tryParse<double>("123.4a5");
ASSERT_FALSE(actual.has_value());
}
TEST_F(StringTest, Parse_DoubleLeadingDot)
{
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::tryParse<double>("-123.45");
ASSERT_TRUE(actual.has_value());
ASSERT_DOUBLE_EQ(*actual, -123.45);
}
TEST_F(StringTest, Parse_DoubleOverflow)
{
auto actual = String::tryParse<double>("1.7976931348623158e309");
ASSERT_FALSE(actual.has_value());
}