MCPcopy Create free account
hub / github.com/ArashPartow/exprtk / run_test05

Function run_test05

exprtk_test.cpp:3323–3393  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3321
3322template <typename T>
3323bool 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),

Callers

nothing calls this directly

Calls 2

not_equalFunction · 0.85
valueMethod · 0.45

Tested by

no test coverage detected