| 3444 | |
| 3445 | template <typename T> |
| 3446 | bool run_test07() |
| 3447 | { |
| 3448 | typedef exprtk::expression<T> expression_t; |
| 3449 | |
| 3450 | const std::string expression_string = "sin(2x + 1 / 3)"; |
| 3451 | |
| 3452 | T x = T(0); |
| 3453 | |
| 3454 | exprtk::symbol_table<T> symbol_table; |
| 3455 | symbol_table.add_variable("x",x); |
| 3456 | |
| 3457 | expression_t expression; |
| 3458 | expression.register_symbol_table(symbol_table); |
| 3459 | |
| 3460 | { |
| 3461 | exprtk::parser<T> parser; |
| 3462 | |
| 3463 | if (!parser.compile(expression_string,expression)) |
| 3464 | { |
| 3465 | printf("run_test07() - Error: %s Expression: %s\n", |
| 3466 | parser.error().c_str(), |
| 3467 | expression_string.c_str()); |
| 3468 | |
| 3469 | return false; |
| 3470 | } |
| 3471 | } |
| 3472 | |
| 3473 | for (x = T(-200); x < T(200); x += T(0.0001)) |
| 3474 | { |
| 3475 | { |
| 3476 | T deriv1_real_result = T(2) * std::cos(T(2) * x + T(1.0 / 3.0)); |
| 3477 | T deriv1_result1 = exprtk::derivative(expression,x); |
| 3478 | T deriv1_result2 = exprtk::derivative(expression,"x"); |
| 3479 | |
| 3480 | if (not_equal(deriv1_result1,deriv1_result2,T(0.00001))) |
| 3481 | { |
| 3482 | printf("run_test07() - 1st Derivative Error: result1 != result2\n"); |
| 3483 | return false; |
| 3484 | } |
| 3485 | |
| 3486 | if (not_equal(deriv1_result1,deriv1_real_result,T(0.00001))) |
| 3487 | { |
| 3488 | printf("run_test07() - 1st Derivative Error: x: %19.15f\tExpected: %19.15f\tResult: %19.15f\n", |
| 3489 | static_cast<double>(x), |
| 3490 | static_cast<double>(deriv1_real_result), |
| 3491 | static_cast<double>(deriv1_result1)); |
| 3492 | |
| 3493 | return false; |
| 3494 | } |
| 3495 | } |
| 3496 | |
| 3497 | { |
| 3498 | T deriv2_real_result = T(-4) * std::sin(T(2) * x + T(1.0 / 3.0)); |
| 3499 | T deriv2_result1 = exprtk::second_derivative(expression,x); |
| 3500 | T deriv2_result2 = exprtk::second_derivative(expression,"x"); |
| 3501 | |
| 3502 | if (not_equal(deriv2_result1,deriv2_result2,T(0.0000001))) |
| 3503 | { |
nothing calls this directly
no test coverage detected