From 1382832bd025c52ae6aae8702a0136d6261d8e7f Mon Sep 17 00:00:00 2001 From: Martin Ettl Date: Wed, 12 May 2010 23:49:09 +0200 Subject: [PATCH] mathlib:isInt() now handles calles of 'u' and 'l' correctly; testcases added --- lib/mathlib.cpp | 11 ++++++++++- test/testmathlib.cpp | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lib/mathlib.cpp b/lib/mathlib.cpp index 0f593c251..e4e1687b3 100644 --- a/lib/mathlib.cpp +++ b/lib/mathlib.cpp @@ -184,9 +184,18 @@ bool MathLib::isInt(const std::string & s) } else if (Mode == eDefault) { - while (std::isdigit(s[n])) ++n; + // starts with digit + bool bStartsWithDigit=false; + while (std::isdigit(s[n])) + { + bStartsWithDigit=true; + ++n; + }; // unsigned or long while (std::tolower(s[n]) == 'u' || std::tolower(s[n]) == 'l') ++n; + + if(bStartsWithDigit==false) + return false; } // eat up whitespace while (std::isspace(s[n])) diff --git a/test/testmathlib.cpp b/test/testmathlib.cpp index d61214345..d2ad34265 100644 --- a/test/testmathlib.cpp +++ b/test/testmathlib.cpp @@ -213,6 +213,15 @@ private: ASSERT_EQUALS(false, MathLib::isInt("+1.0E-1 ")); ASSERT_EQUALS(false, MathLib::isInt("-1.E+1 ")); ASSERT_EQUALS(false, MathLib::isInt("+1.E-1 ")); + // test some garbage + ASSERT_EQUALS(false, MathLib::isInt("u")); + ASSERT_EQUALS(false, MathLib::isInt("l")); + ASSERT_EQUALS(false, MathLib::isInt("ul")); + ASSERT_EQUALS(false, MathLib::isInt("ll")); + ASSERT_EQUALS(false, MathLib::isInt("U")); + ASSERT_EQUALS(false, MathLib::isInt("L")); + ASSERT_EQUALS(false, MathLib::isInt("uL")); + ASSERT_EQUALS(false, MathLib::isInt("LL")); } void isnegative()