From 63c61c082708b5887fcdc59ebd0b763b89e730be Mon Sep 17 00:00:00 2001 From: SirLynix Date: Fri, 26 Jan 2024 10:11:07 +0100 Subject: [PATCH] Core/StringExt: Fix IsNumber returning true for "-" --- include/Nazara/Core/StringExt.inl | 6 +++--- tests/UnitTests/Engine/Core/StringExtTest.cpp | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/Nazara/Core/StringExt.inl b/include/Nazara/Core/StringExt.inl index 50e3c12c1..4ef040b95 100644 --- a/include/Nazara/Core/StringExt.inl +++ b/include/Nazara/Core/StringExt.inl @@ -26,12 +26,12 @@ namespace Nz inline bool IsNumber(std::string_view str) { + if (!str.empty() && str.front() == '-') + str.remove_prefix(1); + if (str.empty()) return false; - if (str.front() == '-') - str.remove_prefix(1); - return std::find_if(str.begin(), str.end(), [](unsigned char c) { return !std::isdigit(c); }) == str.end(); } diff --git a/tests/UnitTests/Engine/Core/StringExtTest.cpp b/tests/UnitTests/Engine/Core/StringExtTest.cpp index 66c8736cd..ce22437b0 100644 --- a/tests/UnitTests/Engine/Core/StringExtTest.cpp +++ b/tests/UnitTests/Engine/Core/StringExtTest.cpp @@ -69,6 +69,8 @@ SCENARIO("String", "[CORE][STRING]") { CHECK(Nz::IsNumber("123456")); CHECK(Nz::IsNumber("-123456")); + CHECK_FALSE(Nz::IsNumber("")); + CHECK_FALSE(Nz::IsNumber("-")); CHECK_FALSE(Nz::IsNumber("123 ")); CHECK_FALSE(Nz::IsNumber("Nazara Engine")); CHECK_FALSE(Nz::IsNumber("12345Nazara Engine"));