| 3321 | |
| 3322 | template <typename T> |
| 3323 | bool run_test05() |
| 3324 | { |
| 3325 | typedef exprtk::expression<T> expression_t; |
| 3326 | |
| 3327 | const std::string expression_string = "clamp(-1.0,sin(2 * pi * x_var123) + cos(y_var123 / 2 * pi),+1.0)"; |
| 3328 | |
| 3329 | exprtk::symbol_table<T> symbol_table; |
| 3330 | std::deque<expression_t> expression_list; |
| 3331 | |
| 3332 | T x = T(-1000); |
| 3333 | T y = T(-1000); |
| 3334 | |
| 3335 | symbol_table.add_variable("x_var123",x); |
| 3336 | symbol_table.add_variable("y_var123",y); |
| 3337 | symbol_table.add_constants(); |
| 3338 | |
| 3339 | const std::size_t expression_count = 10; |
| 3340 | for (std::size_t i = 0; i < expression_count; ++i) |
| 3341 | { |
| 3342 | expression_t e; |
| 3343 | e.register_symbol_table(symbol_table); |
| 3344 | |
| 3345 | { |
| 3346 | exprtk::parser<T> parser; |
| 3347 | |
| 3348 | if (!parser.compile(expression_string,e)) |
| 3349 | { |
| 3350 | printf("run_test05() - Error: %s Expression: %s\n", |
| 3351 | parser.error().c_str(), |
| 3352 | expression_string.c_str()); |
| 3353 | |
| 3354 | return false; |
| 3355 | } |
| 3356 | } |
| 3357 | |
| 3358 | expression_list.push_back(e); |
| 3359 | } |
| 3360 | |
| 3361 | const T pi = T(3.141592653589793238462643383279502); |
| 3362 | const T increment = T(0.001); |
| 3363 | |
| 3364 | while ((x <= T(+1000)) && (y <= T(+1000))) |
| 3365 | { |
| 3366 | T real_result = clamp<T>(-1.0,std::sin(2 * pi * x) + std::cos(y / 2 * pi),+1.0); |
| 3367 | |
| 3368 | for (std::size_t i = 0; i < expression_list.size(); ++i) |
| 3369 | { |
| 3370 | expression_t& expr = expression_list[i]; |
| 3371 | |
| 3372 | T result = expr.value(); |
| 3373 | |
| 3374 | if (not_equal(result,real_result)) |
| 3375 | { |
| 3376 | printf("run_test05() - Computation Error: Expression: [%s]\tExpected: %19.15f\tResult: %19.15f x:%19.15f\ty:%19.15f\tIndex:%d\n", |
| 3377 | expression_string.c_str(), |
| 3378 | static_cast<double>(real_result), |
| 3379 | static_cast<double>(result), |
| 3380 | static_cast<double>(x), |