From 518a75f30d921f2e4c7b2b143673f349c5eaf8f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Mon, 29 Sep 2025 13:12:24 +0300 Subject: [PATCH] Parsing floats/doubles currently unsupported --- src/openrct2/core/String.hpp | 4 ++ test/tests/StringTest.cpp | 94 ------------------------------------ 2 files changed, 4 insertions(+), 94 deletions(-) diff --git a/src/openrct2/core/String.hpp b/src/openrct2/core/String.hpp index f8120f4968..42b80cd787 100644 --- a/src/openrct2/core/String.hpp +++ b/src/openrct2/core/String.hpp @@ -116,6 +116,8 @@ namespace OpenRCT2::String template inline std::optional tryParse(std::string_view input) { + static_assert(!std::is_same_v && !std::is_same_v, "Float support is currently unsupported"); + if (input.empty()) { return std::nullopt; @@ -132,6 +134,8 @@ namespace OpenRCT2::String template inline T parse(std::string_view input) { + static_assert(!std::is_same_v && !std::is_same_v, "Float support is currently unsupported"); + if (input.empty()) { throw std::invalid_argument("Input is empty"); diff --git a/test/tests/StringTest.cpp b/test/tests/StringTest.cpp index ab30c513a0..2fb0e36439 100644 --- a/test/tests/StringTest.cpp +++ b/test/tests/StringTest.cpp @@ -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("123.45"); - ASSERT_TRUE(actual.has_value()); - ASSERT_FLOAT_EQ(*actual, 123.45f); -} - -TEST_F(StringTest, Parse_FloatZero) -{ - auto actual = String::tryParse("0.0"); - ASSERT_TRUE(actual.has_value()); - ASSERT_FLOAT_EQ(*actual, 0.0f); -} - -TEST_F(StringTest, Parse_FloatScientific) -{ - auto actual = String::tryParse("1.23e4"); - ASSERT_TRUE(actual.has_value()); - ASSERT_FLOAT_EQ(*actual, 12300.0f); -} - -TEST_F(StringTest, Parse_FloatInvalid) -{ - auto actual = String::tryParse("123.4a5"); - ASSERT_FALSE(actual.has_value()); -} - -TEST_F(StringTest, Parse_FloatLeadingDot) -{ - auto actual = String::tryParse(".123"); - ASSERT_TRUE(actual.has_value()); - ASSERT_FLOAT_EQ(*actual, 0.123f); -} - -TEST_F(StringTest, Parse_FloatNegative) -{ - auto actual = String::tryParse("-123.45"); - ASSERT_TRUE(actual.has_value()); - ASSERT_FLOAT_EQ(*actual, -123.45f); -} - -TEST_F(StringTest, Parse_FloatOverflow) -{ - auto actual = String::tryParse("3.4028235e39"); - ASSERT_FALSE(actual.has_value()); -} - -TEST_F(StringTest, Parse_DoubleBasic) -{ - auto actual = String::tryParse("123.456789"); - ASSERT_TRUE(actual.has_value()); - ASSERT_DOUBLE_EQ(*actual, 123.456789); -} - -TEST_F(StringTest, Parse_DoubleZero) -{ - auto actual = String::tryParse("0.0"); - ASSERT_TRUE(actual.has_value()); - ASSERT_DOUBLE_EQ(*actual, 0.0); -} - -TEST_F(StringTest, Parse_DoubleScientific) -{ - auto actual = String::tryParse("1.23e10"); - ASSERT_TRUE(actual.has_value()); - ASSERT_DOUBLE_EQ(*actual, 12300000000.0); -} - -TEST_F(StringTest, Parse_DoubleInvalid) -{ - auto actual = String::tryParse("123.4a5"); - ASSERT_FALSE(actual.has_value()); -} - -TEST_F(StringTest, Parse_DoubleLeadingDot) -{ - auto actual = String::tryParse(".123"); - ASSERT_TRUE(actual.has_value()); - ASSERT_DOUBLE_EQ(*actual, 0.123); -} - -TEST_F(StringTest, Parse_DoubleNegative) -{ - auto actual = String::tryParse("-123.45"); - ASSERT_TRUE(actual.has_value()); - ASSERT_DOUBLE_EQ(*actual, -123.45); -} - -TEST_F(StringTest, Parse_DoubleOverflow) -{ - auto actual = String::tryParse("1.7976931348623158e309"); - ASSERT_FALSE(actual.has_value()); -}