Tokenizer: Removed simplifications of standard functions that should be handled through configuration.
This commit is contained in:
parent
466068f55d
commit
9cea2d6dfa
|
@ -7728,26 +7728,6 @@ void Tokenizer::simplifyMathFunctions()
|
||||||
// remove ( %num% )
|
// remove ( %num% )
|
||||||
tok->deleteNext(3);
|
tok->deleteNext(3);
|
||||||
simplifcationMade = true;
|
simplifcationMade = true;
|
||||||
} else if (Token::Match(tok, "abs|fabs|labs|llabs ( %num% )")) {
|
|
||||||
if (Token::simpleMatch(tok->tokAt(-2), "std ::")) {
|
|
||||||
tok = tok->tokAt(-2);// set token index two steps back
|
|
||||||
tok->deleteNext(2); // delete "std ::"
|
|
||||||
}
|
|
||||||
// get number string
|
|
||||||
std::string strNumber(tok->strAt(2));
|
|
||||||
// is the string negative?
|
|
||||||
if (strNumber[0] == '-') {
|
|
||||||
strNumber = strNumber.substr(1); // remove '-' sign
|
|
||||||
}
|
|
||||||
tok->deleteNext(3); // delete e.g. abs ( 1 )
|
|
||||||
tok->str(strNumber); // insert result into token list
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "fma|fmaf|fmal ( %any% , %any% , %any% )")) {
|
|
||||||
// Simplify: fma(a,b,c) == > ( a * b + c )
|
|
||||||
tok->tokAt(3)->str("*");
|
|
||||||
tok->tokAt(5)->str("+");
|
|
||||||
tok->deleteThis(); // delete fma call
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "sqrt|sqrtf|sqrtl|cbrt|cbrtf|cbrtl ( %num% )")) {
|
} else if (Token::Match(tok, "sqrt|sqrtf|sqrtl|cbrt|cbrtf|cbrtl ( %num% )")) {
|
||||||
// Simplify: sqrt(0) = 0 and cbrt(0) == 0
|
// Simplify: sqrt(0) = 0 and cbrt(0) == 0
|
||||||
// sqrt(1) = 1 and cbrt(1) == 1
|
// sqrt(1) = 1 and cbrt(1) == 1
|
||||||
|
@ -7837,66 +7817,6 @@ void Tokenizer::simplifyMathFunctions()
|
||||||
tok->deleteNext(5); // delete e.g. fmax ( 1.0, 0.0 )
|
tok->deleteNext(5); // delete e.g. fmax ( 1.0, 0.0 )
|
||||||
simplifcationMade = true;
|
simplifcationMade = true;
|
||||||
}
|
}
|
||||||
} else if (Token::Match(tok, "isgreater ( %num% , %num% )")) {
|
|
||||||
// The isgreater(x,y) function is the same as calculating (x)>(y).
|
|
||||||
// It returns true (1) if x is greater than y and false (0) otherwise.
|
|
||||||
const std::string& strLeftNumber(tok->strAt(2)); // get left number
|
|
||||||
const std::string& strRightNumber(tok->strAt(4)); // get right number
|
|
||||||
const bool isGreater = MathLib::isGreater(strLeftNumber, strRightNumber); // compare numbers
|
|
||||||
tok->deleteNext(5); // delete tokens
|
|
||||||
tok->str((isGreater == true) ? "true": "false"); // insert results
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "isgreaterequal ( %num% , %num% )")) {
|
|
||||||
// The isgreaterequal(x,y) function is the same as calculating (x)>=(y).
|
|
||||||
// It returns true (1) if x is greater than or equal to y.
|
|
||||||
// False (0) is returned otherwise.
|
|
||||||
const std::string& strLeftNumber(tok->strAt(2)); // get left number
|
|
||||||
const std::string& strRightNumber(tok->strAt(4)); // get right number
|
|
||||||
const bool isGreaterEqual = MathLib::isGreaterEqual(strLeftNumber, strRightNumber); // compare numbers
|
|
||||||
tok->deleteNext(5); // delete tokens
|
|
||||||
tok->str((isGreaterEqual == true) ? "true": "false"); // insert results
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "isless ( %num% , %num% )")) {
|
|
||||||
// Calling this function is the same as calculating (x)<(y).
|
|
||||||
// It returns true (1) if x is less than y.
|
|
||||||
// False (0) is returned otherwise.
|
|
||||||
const std::string& strLeftNumber(tok->strAt(2)); // get left number
|
|
||||||
const std::string& strRightNumber(tok->strAt(4)); // get right number
|
|
||||||
const bool isLess = MathLib::isLess(strLeftNumber, strRightNumber); // compare numbers
|
|
||||||
tok->deleteNext(5); // delete tokens
|
|
||||||
tok->str((isLess == true) ? "true": "false"); // insert results
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "islessequal ( %num% , %num% )")) {
|
|
||||||
// Calling this function is the same as calculating (x)<=(y).
|
|
||||||
// It returns true (1) if x is less or equal to y.
|
|
||||||
// False (0) is returned otherwise.
|
|
||||||
const std::string& strLeftNumber(tok->strAt(2)); // get left number
|
|
||||||
const std::string& strRightNumber(tok->strAt(4)); // get right number
|
|
||||||
const bool isLessEqual = MathLib::isLessEqual(strLeftNumber, strRightNumber); // compare numbers
|
|
||||||
tok->deleteNext(5); // delete tokens
|
|
||||||
tok->str((isLessEqual == true) ? "true": "false"); // insert results
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "islessgreater ( %num% , %num% )")) {
|
|
||||||
// Calling this function is the same as calculating (x)<(y) || (x)>(y).
|
|
||||||
// It returns true (1) if x is less than y or x is greater than y.
|
|
||||||
// False (0) is returned otherwise.
|
|
||||||
const std::string& strLeftNumber(tok->strAt(2)); // get left number
|
|
||||||
const std::string& strRightNumber(tok->strAt(4)); // get right number
|
|
||||||
const bool isLessOrGreater(MathLib::isLess(strLeftNumber, strRightNumber) ||
|
|
||||||
MathLib::isGreater(strLeftNumber, strRightNumber)); // compare numbers
|
|
||||||
tok->deleteNext(5); // delete tokens
|
|
||||||
tok->str((isLessOrGreater == true) ? "true": "false"); // insert results
|
|
||||||
simplifcationMade = true;
|
|
||||||
} else if (Token::Match(tok, "div|ldiv|lldiv ( %any% , %num% )")) {
|
|
||||||
// Calling the function 'div(x,y)' is the same as calculating (x)/(y). In case y has the value 1
|
|
||||||
// (the identity element), the call can be simplified to (x).
|
|
||||||
const std::string& leftParameter(tok->strAt(2)); // get the left parameter
|
|
||||||
const std::string& rightNumber(tok->strAt(4)); // get right number
|
|
||||||
if (isOneNumber(rightNumber)) {
|
|
||||||
tok->str(leftParameter); // insert simplified result
|
|
||||||
tok->deleteNext(5); // delete tokens
|
|
||||||
simplifcationMade = true;
|
|
||||||
}
|
|
||||||
} else if (Token::Match(tok, "pow|powf|powl (")) {
|
} else if (Token::Match(tok, "pow|powf|powl (")) {
|
||||||
if (Token::Match(tok->tokAt(2), "%num% , %num% )")) {
|
if (Token::Match(tok->tokAt(2), "%num% , %num% )")) {
|
||||||
// In case of pow ( 0 , anyNumber > 0): It can be simplified to 0
|
// In case of pow ( 0 , anyNumber > 0): It can be simplified to 0
|
||||||
|
|
|
@ -395,7 +395,6 @@ private:
|
||||||
TEST_CASE(platformWin32WStringCat); // ticket #5015
|
TEST_CASE(platformWin32WStringCat); // ticket #5015
|
||||||
TEST_CASE(platformWinWithNamespace);
|
TEST_CASE(platformWinWithNamespace);
|
||||||
|
|
||||||
TEST_CASE(simplifyMathFunctions); // ticket #5031
|
|
||||||
TEST_CASE(simplifyMathFunctions_sqrt);
|
TEST_CASE(simplifyMathFunctions_sqrt);
|
||||||
TEST_CASE(simplifyMathFunctions_cbrt);
|
TEST_CASE(simplifyMathFunctions_cbrt);
|
||||||
TEST_CASE(simplifyMathFunctions_exp);
|
TEST_CASE(simplifyMathFunctions_exp);
|
||||||
|
@ -406,13 +405,7 @@ private:
|
||||||
TEST_CASE(simplifyMathFunctions_log10);
|
TEST_CASE(simplifyMathFunctions_log10);
|
||||||
TEST_CASE(simplifyMathFunctions_log);
|
TEST_CASE(simplifyMathFunctions_log);
|
||||||
TEST_CASE(simplifyMathFunctions_log2);
|
TEST_CASE(simplifyMathFunctions_log2);
|
||||||
TEST_CASE(simplifyMathFunctions_div);
|
|
||||||
TEST_CASE(simplifyMathFunctions_pow);
|
TEST_CASE(simplifyMathFunctions_pow);
|
||||||
TEST_CASE(simplifyMathFunctions_islessgreater);
|
|
||||||
TEST_CASE(simplifyMathFunctions_islessequal);
|
|
||||||
TEST_CASE(simplifyMathFunctions_isless);
|
|
||||||
TEST_CASE(simplifyMathFunctions_isgreaterequal);
|
|
||||||
TEST_CASE(simplifyMathFunctions_isgreater);
|
|
||||||
TEST_CASE(simplifyMathFunctions_fmin);
|
TEST_CASE(simplifyMathFunctions_fmin);
|
||||||
TEST_CASE(simplifyMathFunctions_fmax);
|
TEST_CASE(simplifyMathFunctions_fmax);
|
||||||
TEST_CASE(simplifyMathFunctions_acosh);
|
TEST_CASE(simplifyMathFunctions_acosh);
|
||||||
|
@ -430,7 +423,6 @@ private:
|
||||||
TEST_CASE(simplifyMathFunctions_atan);
|
TEST_CASE(simplifyMathFunctions_atan);
|
||||||
TEST_CASE(simplifyMathFunctions_atanh);
|
TEST_CASE(simplifyMathFunctions_atanh);
|
||||||
TEST_CASE(simplifyMathFunctions_expm1);
|
TEST_CASE(simplifyMathFunctions_expm1);
|
||||||
TEST_CASE(simplifyMathFunctions_fma);
|
|
||||||
|
|
||||||
TEST_CASE(simplifyMathExpressions); //ticket #1620
|
TEST_CASE(simplifyMathExpressions); //ticket #1620
|
||||||
TEST_CASE(simplifyStaticConst);
|
TEST_CASE(simplifyStaticConst);
|
||||||
|
@ -6900,40 +6892,6 @@ private:
|
||||||
ASSERT_EQUALS(expected_atanl, tokenizeAndStringify(code_atanl));
|
ASSERT_EQUALS(expected_atanl, tokenizeAndStringify(code_atanl));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyMathFunctions_fma() {
|
|
||||||
// verify fma(), fmal(), fmaf() - simplifcation
|
|
||||||
const char code_fma[] ="int f(int a, int b, int c) { return fma(a,b,c); }";
|
|
||||||
const char expected_fma[] = "int f ( int a , int b , int c ) { return ( a * b + c ) ; }";
|
|
||||||
ASSERT_EQUALS(expected_fma, tokenizeAndStringify(code_fma));
|
|
||||||
|
|
||||||
const char code_fmaf[] ="float f ( float a , float b , float c ) { return fmaf(a,b,c); }";
|
|
||||||
const char expected_fmaf[] = "float f ( float a , float b , float c ) { return ( a * b + c ) ; }";
|
|
||||||
ASSERT_EQUALS(expected_fmaf, tokenizeAndStringify(code_fmaf));
|
|
||||||
|
|
||||||
const char code_fmal[] ="long double f ( long double a , long double b , long double c ) { return fmal(a,b,c); }";
|
|
||||||
const char expected_fmal[] = "long double f ( long double a , long double b , long double c ) { return ( a * b + c ) ; }";
|
|
||||||
ASSERT_EQUALS(expected_fmal, tokenizeAndStringify(code_fmal));
|
|
||||||
|
|
||||||
const char code_fma1[] = "void f() {\n"
|
|
||||||
" std::cout << \"fma(1,2,3): \" << fma(1,2,3) << std::endl;\n"
|
|
||||||
" std::cout << \"fmaf(1,2,3): \" << fmaf(1,2,3) << std::endl;\n"
|
|
||||||
" std::cout << \"fmal(1,2,3): \" << fmal(1,2,3) << std::endl;\n"
|
|
||||||
"};";
|
|
||||||
|
|
||||||
const char expected_fma1[] = "void f() {\n"
|
|
||||||
"std :: cout << \"fma(1,2,3): \" << 5 << std :: endl ;\n"
|
|
||||||
"std :: cout << \"fmaf(1,2,3): \" << 5 << std :: endl ;\n"
|
|
||||||
"std :: cout << \"fmal(1,2,3): \" << 5 << std :: endl ;\n"
|
|
||||||
"} ;";
|
|
||||||
|
|
||||||
const char current_fma1[] = "void f ( ) {\n"
|
|
||||||
"std :: cout << \"fma(1,2,3): \" << ( 1 * 2 + 3 ) << std :: endl ;\n"
|
|
||||||
"std :: cout << \"fmaf(1,2,3): \" << ( 1 * 2 + 3 ) << std :: endl ;\n"
|
|
||||||
"std :: cout << \"fmal(1,2,3): \" << ( 1 * 2 + 3 ) << std :: endl ;\n"
|
|
||||||
"} ;";
|
|
||||||
TODO_ASSERT_EQUALS(expected_fma1, current_fma1,tokenizeAndStringify(code_fma1));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_tanh() {
|
void simplifyMathFunctions_tanh() {
|
||||||
// verify tanh(), tanhf(), tanhl() - simplifcation
|
// verify tanh(), tanhf(), tanhl() - simplifcation
|
||||||
const char code_tanh[] ="void f(int x) {\n"
|
const char code_tanh[] ="void f(int x) {\n"
|
||||||
|
@ -7446,42 +7404,6 @@ private:
|
||||||
ASSERT_EQUALS(expected_log2l, tokenizeAndStringify(code_log2l));
|
ASSERT_EQUALS(expected_log2l, tokenizeAndStringify(code_log2l));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyMathFunctions_div() {
|
|
||||||
// verify div(), ldiv(), lldiv() - simplifcation
|
|
||||||
const char code_div[] ="void f(int x) {\n"
|
|
||||||
" std::cout << div(x,1);\n" //simplify
|
|
||||||
" std::cout << div(x,-1);\n" // do not simplify
|
|
||||||
" std::cout << ldiv(10L,1L);\n" // simplify
|
|
||||||
" std::cout << ldiv(10L,132L);\n" // do not simplify
|
|
||||||
" std::cout << lldiv(10LL,1LL);\n" // simplify
|
|
||||||
" std::cout << lldiv(10LL,132LL);\n" // do not simplify
|
|
||||||
"}";
|
|
||||||
|
|
||||||
const char expected_div[] = "void f ( int x ) {\n"
|
|
||||||
"std :: cout << x ;\n"
|
|
||||||
"std :: cout << div ( x , -1 ) ;\n"
|
|
||||||
"std :: cout << 10L ;\n"
|
|
||||||
"std :: cout << ldiv ( 10L , 132L ) ;\n"
|
|
||||||
"std :: cout << 10LL ;\n"
|
|
||||||
"std :: cout << lldiv ( 10LL , 132LL ) ;\n"
|
|
||||||
"}";
|
|
||||||
ASSERT_EQUALS(expected_div, tokenizeAndStringify(code_div));
|
|
||||||
|
|
||||||
// Do not simplify class members.
|
|
||||||
// case: div
|
|
||||||
const char code_div1[] = "int f(const Fred &fred) {return fred.div(12,3);}";
|
|
||||||
const char expected_div1[] = "int f ( const Fred & fred ) { return fred . div ( 12 , 3 ) ; }";
|
|
||||||
ASSERT_EQUALS(expected_div1, tokenizeAndStringify(code_div1));
|
|
||||||
// case: ldiv
|
|
||||||
const char code_div2[] = "int f(const Fred &fred) {return fred.ldiv(12,3);}";
|
|
||||||
const char expected_div2[] = "int f ( const Fred & fred ) { return fred . ldiv ( 12 , 3 ) ; }";
|
|
||||||
ASSERT_EQUALS(expected_div2, tokenizeAndStringify(code_div2));
|
|
||||||
// case: lldiv
|
|
||||||
const char code_div3[] = "int f(const Fred &fred) {return fred.lldiv(12,3);}";
|
|
||||||
const char expected_div3[] = "int f ( const Fred & fred ) { return fred . lldiv ( 12 , 3 ) ; }";
|
|
||||||
ASSERT_EQUALS(expected_div3, tokenizeAndStringify(code_div3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_pow() {
|
void simplifyMathFunctions_pow() {
|
||||||
// verify pow(),pow(),powl() - simplifcation
|
// verify pow(),pow(),powl() - simplifcation
|
||||||
const char code_pow[] ="void f() {\n"
|
const char code_pow[] ="void f() {\n"
|
||||||
|
@ -7534,141 +7456,6 @@ private:
|
||||||
ASSERT_EQUALS(expected_pow4, tokenizeAndStringify(code_pow4));
|
ASSERT_EQUALS(expected_pow4, tokenizeAndStringify(code_pow4));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyMathFunctions_islessgreater() {
|
|
||||||
// verify islessgreater() simplification
|
|
||||||
const char code_islessgreater[] = "bool f(){\n"
|
|
||||||
"return islessgreater(1,0);\n" // (1 < 0) or (1 > 0) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_islessgreater[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessgreater, tokenizeAndStringify(code_islessgreater));
|
|
||||||
|
|
||||||
const char code_islessgreater1[] = "bool f(){\n"
|
|
||||||
"return islessgreater(0,1);\n" // (0 < 1) or (0 > 1) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_islessgreater1[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessgreater1, tokenizeAndStringify(code_islessgreater1));
|
|
||||||
|
|
||||||
const char code_islessgreater2[] = "bool f(){\n"
|
|
||||||
"return islessgreater(0,0);\n" // (0 < 0) or (0 > 0) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_islessgreater2[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessgreater2, tokenizeAndStringify(code_islessgreater2));
|
|
||||||
|
|
||||||
const char code_islessgreater3[] = "bool f(int i){\n"
|
|
||||||
"return islessgreater(i,0);\n" // <-- Do not simplify this
|
|
||||||
"}";
|
|
||||||
const char expected_islessgreater3[] = "bool f ( int i ) {\nreturn islessgreater ( i , 0 ) ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessgreater3, tokenizeAndStringify(code_islessgreater3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_islessequal() {
|
|
||||||
// verify islessequal() simplification
|
|
||||||
const char code_islessequal[] = "bool f(){\n"
|
|
||||||
"return islessequal(1,0);\n" // (1 <= 0) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_islessequal[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessequal, tokenizeAndStringify(code_islessequal));
|
|
||||||
|
|
||||||
const char code_islessequal1[] = "bool f(){\n"
|
|
||||||
"return islessequal(0,1);\n" // (0 <= 1) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_islessequal1[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessequal1, tokenizeAndStringify(code_islessequal1));
|
|
||||||
|
|
||||||
const char code_islessequal2[] = "bool f(){\n"
|
|
||||||
"return islessequal(0,0);\n" // (0 <= 0) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_islessequal2[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessequal2, tokenizeAndStringify(code_islessequal2));
|
|
||||||
|
|
||||||
const char code_islessequal3[] = "bool f(int i){\n"
|
|
||||||
"return islessequal(i,0);\n" // <-- Do not simplify this
|
|
||||||
"}";
|
|
||||||
const char expected_islessequal3[] = "bool f ( int i ) {\nreturn islessequal ( i , 0 ) ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_islessequal3, tokenizeAndStringify(code_islessequal3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_isless() {
|
|
||||||
// verify isless() simplification
|
|
||||||
const char code_isless[] = "bool f(){\n"
|
|
||||||
"return isless(1,0);\n" // (1 < 0) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_isless[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isless, tokenizeAndStringify(code_isless));
|
|
||||||
|
|
||||||
const char code_isless1[] = "bool f(){\n"
|
|
||||||
"return isless(0,1);\n" // (0 < 1) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_isless1[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isless1, tokenizeAndStringify(code_isless1));
|
|
||||||
|
|
||||||
const char code_isless2[] = "bool f(){\n"
|
|
||||||
"return isless(0,0);\n" // (0 < 0) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_isless2[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isless2, tokenizeAndStringify(code_isless2));
|
|
||||||
|
|
||||||
const char code_isless3[] = "bool f(int i){\n"
|
|
||||||
"return isless(i,0);\n" // <-- Do not simplify this
|
|
||||||
"}";
|
|
||||||
const char expected_isless3[] = "bool f ( int i ) {\nreturn isless ( i , 0 ) ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isless3, tokenizeAndStringify(code_isless3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_isgreaterequal() {
|
|
||||||
// verify isgreaterequal() simplification
|
|
||||||
const char code_isgreaterequal[] = "bool f(){\n"
|
|
||||||
"return isgreaterequal(1,0);\n" // (1 >= 0) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_isgreaterequal[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreaterequal, tokenizeAndStringify(code_isgreaterequal));
|
|
||||||
|
|
||||||
const char code_isgreaterequal1[] = "bool f(){\n"
|
|
||||||
"return isgreaterequal(0,1);\n" // (0 >= 1) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_isgreaterequal1[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreaterequal1, tokenizeAndStringify(code_isgreaterequal1));
|
|
||||||
|
|
||||||
const char code_isgreaterequal2[] = "bool f(){\n"
|
|
||||||
"return isgreaterequal(0,0);\n" // (0 >= 0) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_isgreaterequal2[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreaterequal2, tokenizeAndStringify(code_isgreaterequal2));
|
|
||||||
|
|
||||||
const char code_isgreaterequal3[] = "bool f(int i){\n"
|
|
||||||
"return isgreaterequal(i,0);\n" // <-- Do not simplify this
|
|
||||||
"}";
|
|
||||||
const char expected_isgreaterequal3[] = "bool f ( int i ) {\nreturn isgreaterequal ( i , 0 ) ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreaterequal3, tokenizeAndStringify(code_isgreaterequal3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_isgreater() {
|
|
||||||
// verify isgreater() simplification
|
|
||||||
const char code_isgreater[] = "bool f(){\n"
|
|
||||||
"return isgreater(1,0);\n" // (1 > 0) --> true
|
|
||||||
"}";
|
|
||||||
const char expected_isgreater[] = "bool f ( ) {\nreturn true ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreater, tokenizeAndStringify(code_isgreater));
|
|
||||||
|
|
||||||
const char code_isgreater1[] = "bool f(){\n"
|
|
||||||
"return isgreater(0,1);\n" // (0 > 1) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_isgreater1[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreater1, tokenizeAndStringify(code_isgreater1));
|
|
||||||
|
|
||||||
const char code_isgreater2[] = "bool f(){\n"
|
|
||||||
"return isgreater(0,0);\n" // (0 > 0) --> false
|
|
||||||
"}";
|
|
||||||
const char expected_isgreater2[] = "bool f ( ) {\nreturn false ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreater2, tokenizeAndStringify(code_isgreater2));
|
|
||||||
|
|
||||||
const char code_isgreater3[] = "bool f(int i){\n"
|
|
||||||
"return isgreater(i,0);\n" // <-- Do not simplify this
|
|
||||||
"}";
|
|
||||||
const char expected_isgreater3[] = "bool f ( int i ) {\nreturn isgreater ( i , 0 ) ;\n}";
|
|
||||||
ASSERT_EQUALS(expected_isgreater3, tokenizeAndStringify(code_isgreater3));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathFunctions_fmin() {
|
void simplifyMathFunctions_fmin() {
|
||||||
// verify fmin,fminl,fminl simplifcation
|
// verify fmin,fminl,fminl simplifcation
|
||||||
const char code_fmin[] ="void f() {\n"
|
const char code_fmin[] ="void f() {\n"
|
||||||
|
@ -7735,50 +7522,6 @@ private:
|
||||||
ASSERT_EQUALS(expected_fmax1, tokenizeAndStringify(code_fmax1));
|
ASSERT_EQUALS(expected_fmax1, tokenizeAndStringify(code_fmax1));
|
||||||
}
|
}
|
||||||
|
|
||||||
void simplifyMathFunctions() { //#5031
|
|
||||||
// verify abs,fabs,labs,llabs,atol simplifcation
|
|
||||||
const char code1[] = "void foo() {\n"
|
|
||||||
" std::cout<<std::abs(0);\n" // in std:: namespeace
|
|
||||||
" std::cout<<std::fabs(0.0);\n" // in std:: namespeace
|
|
||||||
" std::cout<<abs(0);\n"
|
|
||||||
" std::cout<<fabs(0.0);\n"
|
|
||||||
" std::cout<<labs(0);\n"
|
|
||||||
" std::cout<<llabs(0);\n"
|
|
||||||
" std::cout<<std::abs(-1);\n" // in std:: namespeace
|
|
||||||
" std::cout<<std::fabs(-1.0);\n" // in std:: namespeace
|
|
||||||
" std::cout<<abs(-1);\n"
|
|
||||||
" std::cout<<fabs(-1.0);\n"
|
|
||||||
" std::cout<<labs(-1);\n"
|
|
||||||
" std::cout<<llabs(-1);\n"
|
|
||||||
" std::cout<<atol(\"1\");\n"
|
|
||||||
" std::cout<<atol(\"x\");\n"
|
|
||||||
" std::cout<<abs(atol(\"1\"));\n" // nested calls
|
|
||||||
"}";
|
|
||||||
const char expected1[] = "void foo ( ) {\n"
|
|
||||||
"std :: cout << 0 ;\n"
|
|
||||||
"std :: cout << 0.0 ;\n"
|
|
||||||
"std :: cout << 0 ;\n"
|
|
||||||
"std :: cout << 0.0 ;\n"
|
|
||||||
"std :: cout << 0 ;\n"
|
|
||||||
"std :: cout << 0 ;\n"
|
|
||||||
"std :: cout << 1 ;\n"
|
|
||||||
"std :: cout << 1.0 ;\n"
|
|
||||||
"std :: cout << 1 ;\n"
|
|
||||||
"std :: cout << 1.0 ;\n"
|
|
||||||
"std :: cout << 1 ;\n"
|
|
||||||
"std :: cout << 1 ;\n"
|
|
||||||
"std :: cout << 1 ;\n"
|
|
||||||
"std :: cout << atol ( \"x\" ) ;\n"
|
|
||||||
"std :: cout << 1 ;\n"
|
|
||||||
"}";
|
|
||||||
ASSERT_EQUALS(expected1, tokenizeAndStringify(code1));
|
|
||||||
|
|
||||||
// testcase from ticket #5031
|
|
||||||
const char code2[] = "extern int a; void f(){printf(\"%i\", abs(--a));}\n";
|
|
||||||
const char expected2[] = "extern int a ; void f ( ) { printf ( \"%i\" , abs ( -- a ) ) ; }";
|
|
||||||
ASSERT_EQUALS(expected2, tokenizeAndStringify(code2));
|
|
||||||
}
|
|
||||||
|
|
||||||
void simplifyMathExpressions() { //#1620
|
void simplifyMathExpressions() { //#1620
|
||||||
const char code1[] = "void foo() {\n"
|
const char code1[] = "void foo() {\n"
|
||||||
" std::cout<<pow(sin(x),2)+pow(cos(x),2);\n"
|
" std::cout<<pow(sin(x),2)+pow(cos(x),2);\n"
|
||||||
|
|
Loading…
Reference in New Issue