Fixed #6281: MathLib: Long integer suffix i64 is not supported.
This commit is contained in:
parent
f5d804f71a
commit
4a2a4474c9
|
@ -368,9 +368,7 @@ bool MathLib::isHex(const std::string& s)
|
||||||
|
|
||||||
bool MathLib::isValidSuffix(std::string::const_iterator it, std::string::const_iterator end)
|
bool MathLib::isValidSuffix(std::string::const_iterator it, std::string::const_iterator end)
|
||||||
{
|
{
|
||||||
enum Status {
|
enum {START, SUFFIX_U, SUFFIX_UL, SUFFIX_ULL, SUFFIX_L, SUFFIX_LU, SUFFIX_LL, SUFFIX_LLU, SUFFIX_I, SUFFIX_I6, SUFFIX_I64} state = START;
|
||||||
START, SUFFIX_U, SUFFIX_UL, SUFFIX_ULL, SUFFIX_L, SUFFIX_LU, SUFFIX_LL, SUFFIX_LLU
|
|
||||||
} state = START;
|
|
||||||
for (; it != end; ++it) {
|
for (; it != end; ++it) {
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case START:
|
case START:
|
||||||
|
@ -378,6 +376,8 @@ bool MathLib::isValidSuffix(std::string::const_iterator it, std::string::const_i
|
||||||
state = SUFFIX_U;
|
state = SUFFIX_U;
|
||||||
else if (*it == 'l' || *it == 'L')
|
else if (*it == 'l' || *it == 'L')
|
||||||
state = SUFFIX_L;
|
state = SUFFIX_L;
|
||||||
|
else if (*it == 'i')
|
||||||
|
state = SUFFIX_I;
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
@ -409,13 +409,31 @@ bool MathLib::isValidSuffix(std::string::const_iterator it, std::string::const_i
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
break;
|
break;
|
||||||
|
case SUFFIX_I:
|
||||||
|
if (*it == '6')
|
||||||
|
state = SUFFIX_I6;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
|
case SUFFIX_I6:
|
||||||
|
if (*it == '4')
|
||||||
|
state = SUFFIX_I64;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (state == SUFFIX_U) || (state == SUFFIX_L)
|
return ((state == SUFFIX_U) ||
|
||||||
|| (state == SUFFIX_UL) || (state == SUFFIX_LU) || (state == SUFFIX_LL)
|
(state == SUFFIX_L) ||
|
||||||
|| (state == SUFFIX_ULL) || (state == SUFFIX_LLU);
|
(state == SUFFIX_UL) ||
|
||||||
|
(state == SUFFIX_LU) ||
|
||||||
|
(state == SUFFIX_LL) ||
|
||||||
|
(state == SUFFIX_ULL) ||
|
||||||
|
(state == SUFFIX_LLU) ||
|
||||||
|
(state == SUFFIX_I64));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*! \brief Does the string represent a binary number?
|
/*! \brief Does the string represent a binary number?
|
||||||
|
|
|
@ -36,6 +36,7 @@ private:
|
||||||
TEST_CASE(isdec);
|
TEST_CASE(isdec);
|
||||||
TEST_CASE(isoct);
|
TEST_CASE(isoct);
|
||||||
TEST_CASE(ishex);
|
TEST_CASE(ishex);
|
||||||
|
TEST_CASE(isValidSuffix);
|
||||||
TEST_CASE(isnegative);
|
TEST_CASE(isnegative);
|
||||||
TEST_CASE(ispositive);
|
TEST_CASE(ispositive);
|
||||||
TEST_CASE(isfloat);
|
TEST_CASE(isfloat);
|
||||||
|
@ -533,6 +534,77 @@ private:
|
||||||
ASSERT_EQUALS(false, MathLib::isHex(""));
|
ASSERT_EQUALS(false, MathLib::isHex(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void isValidSuffix(void)
|
||||||
|
{
|
||||||
|
// negative testing
|
||||||
|
std::string value = "ux";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "ulx";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "lx";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "lux";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "lll";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "garbage";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "llu ";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "i";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "iX";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "i6X";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "i64X";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "i64 ";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "i66";
|
||||||
|
ASSERT_EQUALS(false, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
// positive testing
|
||||||
|
value = "u";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "ul";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "ull";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "l";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "lu";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "ll";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "llu";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
|
||||||
|
value = "i64";
|
||||||
|
ASSERT_EQUALS(true, MathLib::isValidSuffix(value.begin(), value.end()));
|
||||||
|
}
|
||||||
|
|
||||||
void ispositive() const
|
void ispositive() const
|
||||||
{
|
{
|
||||||
ASSERT_EQUALS(false, MathLib::isPositive("-1"));
|
ASSERT_EQUALS(false, MathLib::isPositive("-1"));
|
||||||
|
|
Loading…
Reference in New Issue