| 24 | //********************************************************** |
| 25 | |
| 26 | void ParserTest::testBasics() { |
| 27 | Parsing::Parser parser(false); |
| 28 | const QVector<QPair<QString, double>> tests{{QStringLiteral("42"), 42.}, |
| 29 | {QStringLiteral("1."), 1.}, |
| 30 | {QStringLiteral("1+1"), 2.}, |
| 31 | {QStringLiteral("1+2+3+4+5"), 15.}, |
| 32 | {QStringLiteral("2*3"), 6.}, |
| 33 | {QStringLiteral("3/2"), 1.5}, |
| 34 | {QStringLiteral("2 -4 +6 -1 -1- 0 +8"), 10.}, |
| 35 | {QStringLiteral("1/3+1/3+1/3"), 1.}, |
| 36 | {QStringLiteral("1.5 + 2.5"), 4.}, |
| 37 | {QStringLiteral("4*2.5 + 8.5+1.5 / 3.0"), 19.}, |
| 38 | {QStringLiteral("5.0005 + 0.0095"), 5.01}, |
| 39 | {QStringLiteral("pi"), M_PI}, |
| 40 | {QStringLiteral("e"), M_E}, |
| 41 | {QStringLiteral("e^1"), M_E}, |
| 42 | {QStringLiteral("hbar"), GSL_CONST_MKSA_PLANCKS_CONSTANT_HBAR}, |
| 43 | {QStringLiteral(" 1 + 1 "), 2.}, |
| 44 | {QStringLiteral("1- 2"), -1.}, |
| 45 | {QStringLiteral("2* 2.5"), 5.}, |
| 46 | {QStringLiteral("3 + 8/5 -1 -2*5"), -6.4}, |
| 47 | {QStringLiteral("(1)"), 1.}, |
| 48 | {QStringLiteral("-(1)"), -1.}, |
| 49 | {QStringLiteral("(1+1)"), 2}, |
| 50 | {QStringLiteral("(sin(0))"), 0.}, |
| 51 | {QStringLiteral("(( ((2)) + 4))*((5))"), 30.}, |
| 52 | {QStringLiteral("2^2"), 4.}, |
| 53 | {QStringLiteral("3**2"), 9.}, |
| 54 | {QStringLiteral("1%1"), 0.}, |
| 55 | {QStringLiteral("3%2"), 1.}, |
| 56 | {QStringLiteral("1.e-5"), 1.e-5}, |
| 57 | {QStringLiteral("9.5E3"), 9500.}, |
| 58 | {QStringLiteral("|1.5|"), 1.5}, |
| 59 | {QStringLiteral("|-2.5|"), 2.5}, |
| 60 | {QStringLiteral("0!"), 1}, |
| 61 | {QStringLiteral("4!"), 24}, |
| 62 | {QStringLiteral("-3!"), -6.}, |
| 63 | {QStringLiteral("exp(0)"), 1.}, |
| 64 | {QStringLiteral("exp(1)"), M_E}, |
| 65 | {QStringLiteral("sqrt(0)"), 0.}, |
| 66 | {QStringLiteral("sin(0)"), 0.}, |
| 67 | {QStringLiteral("cos(pi)"), -1.}}; |
| 68 | |
| 69 | for (auto& expr : tests) |
| 70 | QCOMPARE(parser.parse(qPrintable(expr.first), "C"), expr.second); |
| 71 | |
| 72 | const QVector<QPair<QString, double>> testsFuzzy{{QStringLiteral("(sin(pi))"), 0.}}; |
| 73 | |
| 74 | for (const auto& expr : testsFuzzy) |
| 75 | FuzzyCompare(parser.parse(qPrintable(expr.first), "C"), expr.second, 1.e-15); |
| 76 | } |
| 77 | |
| 78 | void ParserTest::testFunction0Arguments() { |
| 79 | // Function with no arguments |