Skip to content

Commit 6eaa2f2

Browse files
committed
Tokenizer:simplifyMathFunctions: added support for acos[f|l] functions.
1 parent 58c09f8 commit 6eaa2f2

3 files changed

Lines changed: 38 additions & 8 deletions

File tree

lib/tokenize.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8343,7 +8343,7 @@ bool Tokenizer::isTwoNumber(const std::string &s)
83438343
// exp2f(), exp2l(), log2(), log2f(), log2l(), log1p(),
83448344
// log1pf(), log1pl(), log10(), log10l(), log10f(),
83458345
// log(),logf(),logl(),logb(),logbf(),logbl(), acosh()
8346-
// acoshf(), acoshl()
8346+
// acoshf(), acoshl(), acos(), acosf(), acosl()
83478347
// in the tokenlist.
83488348
//
83498349
// Reference:
@@ -8420,11 +8420,10 @@ bool Tokenizer::simplifyMathFunctions()
84208420
tok->str("0"); // insert result into token list
84218421
simplifcationMade = true;
84228422
}
8423-
} else if (Token::Match(tok, "log2|log2f|log2l|log|logf|logl|log10|log10f|log10l|logb|logbf|logbl|acosh|acoshf|acoshl ( %num% )")) {
8423+
} else if (Token::Match(tok, "log2|log2f|log2l|log|logf|logl|log10|log10f|log10l|logb|logbf|logbl|acosh|acoshf|acoshl|acos|acosf|acosl ( %num% )")) {
84248424
// Simplify: log2[f|l](1) = 0 , log10[f|l](1) = 0
84258425
// log[f|l](1) = 0 , logb10[f|l](1) = 0
8426-
// acosh[f|l](1) = 0
8427-
// TODO: acos[f|l](1) = 0
8426+
// acosh[f|l](1) = 0, acos[f|l](1) = 0
84288427
// get number string
84298428
const std::string parameter(tok->tokAt(2)->str());
84308429
// is parameter 1 ?

test/testother.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1471,8 +1471,7 @@ class TestOther : public TestFixture {
14711471
// acos, acosf, acosl
14721472
check("void foo()\n"
14731473
"{\n"
1474-
" return acos(1) \n"
1475-
" + acos(-1) \n"
1474+
" return acos(-1) \n"
14761475
" + acos(0.1) \n"
14771476
" + acos(0.0001) \n"
14781477
" + acos(0.01) \n"
@@ -1482,7 +1481,6 @@ class TestOther : public TestFixture {
14821481
" + acos(0.1E-1) \n"
14831482
" + acos(+0.1E-1) \n"
14841483
" + acos(-0.1E-1) \n"
1485-
" + acosf(1) \n"
14861484
" + acosf(-1) \n"
14871485
" + acosf(0.1) \n"
14881486
" + acosf(0.0001) \n"
@@ -1493,7 +1491,6 @@ class TestOther : public TestFixture {
14931491
" + acosf(0.1E-1) \n"
14941492
" + acosf(+0.1E-1) \n"
14951493
" + acosf(-0.1E-1) \n"
1496-
" + acosl(1) \n"
14971494
" + acosl(-1) \n"
14981495
" + acosl(0.1) \n"
14991496
" + acosl(0.0001) \n"

test/testtokenize.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -515,6 +515,7 @@ class TestTokenizer : public TestFixture {
515515
TEST_CASE(simplifyMathFunctions_fmin);
516516
TEST_CASE(simplifyMathFunctions_fmax);
517517
TEST_CASE(simplifyMathFunctions_acosh);
518+
TEST_CASE(simplifyMathFunctions_acos);
518519

519520
TEST_CASE(simplifyMathExpressions); //ticket #1620
520521

@@ -8344,6 +8345,39 @@ class TestTokenizer : public TestFixture {
83448345
ASSERT_EQUALS(false, Tokenizer::isTwoNumber("garbage"));
83458346
}
83468347

8348+
void simplifyMathFunctions_acos() {
8349+
// verify acos(), acosf(), acosl() - simplifcation
8350+
const char code_acos[] ="void f(int x) {\n"
8351+
" std::cout << acos(x);\n" // do not simplify
8352+
" std::cout << acos(1L);\n" // simplify to 0
8353+
"}";
8354+
const char expected_acos[] = "void f ( int x ) {\n"
8355+
"std :: cout << acos ( x ) ;\n"
8356+
"std :: cout << 0 ;\n"
8357+
"}";
8358+
ASSERT_EQUALS(expected_acos, tokenizeAndStringify(code_acos));
8359+
8360+
const char code_acosf[] ="void f(float x) {\n"
8361+
" std::cout << acosf(x);\n" // do not simplify
8362+
" std::cout << acosf(1.0f);\n" // simplify to 0
8363+
"}";
8364+
const char expected_acosf[] = "void f ( float x ) {\n"
8365+
"std :: cout << acosf ( x ) ;\n"
8366+
"std :: cout << 0 ;\n"
8367+
"}";
8368+
ASSERT_EQUALS(expected_acosf, tokenizeAndStringify(code_acosf));
8369+
8370+
const char code_acosl[] ="void f(long double x) {\n"
8371+
" std::cout << acosl(x);\n" // do not simplify
8372+
" std::cout << acosl(1.0d);\n" // simplify to 0
8373+
"}";
8374+
const char expected_acosl[] = "void f ( long double x ) {\n"
8375+
"std :: cout << acosl ( x ) ;\n"
8376+
"std :: cout << 0 ;\n"
8377+
"}";
8378+
ASSERT_EQUALS(expected_acosl, tokenizeAndStringify(code_acosl));
8379+
}
8380+
83478381
void simplifyMathFunctions_acosh() {
83488382
// verify acosh(), acoshf(), acoshl() - simplifcation
83498383
const char code_acosh[] ="void f(int x) {\n"

0 commit comments

Comments
 (0)