mirror of
https://github.com/ArashPartow/exprtk.git
synced 2025-06-12 16:27:23 +00:00
C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html
This commit is contained in:
126
exprtk_test.cpp
126
exprtk_test.cpp
@ -6336,6 +6336,132 @@ inline bool run_test18()
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
bool failure = false;
|
||||
|
||||
typedef exprtk::symbol_table<T> symbol_table_t;
|
||||
typedef exprtk::expression<T> expression_t;
|
||||
typedef exprtk::parser<T> parser_t;
|
||||
|
||||
std::vector<T> v0;
|
||||
std::vector<T> s;
|
||||
|
||||
#define pb(v,N) \
|
||||
v.push_back(T(N)); \
|
||||
|
||||
pb(v0,0) pb(v0,1) pb(v0,2) pb(v0,3) pb(v0,4)
|
||||
pb(v0,5) pb(v0,6) pb(v0,7) pb(v0,8) pb(v0,9)
|
||||
|
||||
pb(s, 3) pb(s, 6) pb(s, 9) pb(s,12)
|
||||
pb(s,15) pb(s,18) pb(s,21)
|
||||
#undef pb
|
||||
|
||||
const std::string expr_string = "var i := 0; var j := 1; var k := 2; v[i] + v[j] + v[k]";
|
||||
|
||||
exprtk::vector_view<T> v = exprtk::make_vector_view(v0,4);
|
||||
|
||||
symbol_table_t symbol_table;
|
||||
symbol_table.add_vector("v",v);
|
||||
|
||||
expression_t expression;
|
||||
expression.register_symbol_table(symbol_table);
|
||||
|
||||
parser_t parser;
|
||||
|
||||
if (!parser.compile(expr_string,expression))
|
||||
{
|
||||
printf("run_test18() - Error: %s\tExpression: %s\n",
|
||||
parser.error().c_str(),
|
||||
expr_string.c_str());
|
||||
|
||||
failure = true;
|
||||
}
|
||||
|
||||
for (std::size_t i = 0; i < v0.size() - 4; ++i)
|
||||
{
|
||||
v.rebase(v0.data() + i);
|
||||
|
||||
T sum = expression.value();
|
||||
|
||||
if (not_equal(sum,s[i]))
|
||||
{
|
||||
printf("run_test18() - Error in evaluation! (8) Expression: %s Expected: %5.3f Computed: %5.3f\n",
|
||||
expr_string.c_str(),
|
||||
s[i],
|
||||
sum);
|
||||
|
||||
failure = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (failure)
|
||||
return false;
|
||||
}
|
||||
|
||||
{
|
||||
bool failure = false;
|
||||
|
||||
typedef exprtk::symbol_table<T> symbol_table_t;
|
||||
typedef exprtk::expression<T> expression_t;
|
||||
typedef exprtk::parser<T> parser_t;
|
||||
|
||||
std::vector<T> v0;
|
||||
std::vector<T> s;
|
||||
|
||||
#define pb(v,N) \
|
||||
v.push_back(T(N)); \
|
||||
|
||||
pb(v0,0) pb(v0,1) pb(v0,2) pb(v0,3) pb(v0,4)
|
||||
pb(v0,5) pb(v0,6) pb(v0,7) pb(v0,8) pb(v0,9)
|
||||
|
||||
pb(s, 3) pb(s, 6) pb(s, 9) pb(s,12)
|
||||
pb(s,15) pb(s,18) pb(s,21)
|
||||
#undef pb
|
||||
|
||||
const std::string expr_string = "var i := 0; v[i + 0] + v[i + 1] + v[i + 2]";
|
||||
|
||||
exprtk::vector_view<T> v = exprtk::make_vector_view(v0,4);
|
||||
|
||||
symbol_table_t symbol_table;
|
||||
symbol_table.add_vector("v",v);
|
||||
|
||||
expression_t expression;
|
||||
expression.register_symbol_table(symbol_table);
|
||||
|
||||
parser_t parser;
|
||||
|
||||
if (!parser.compile(expr_string,expression))
|
||||
{
|
||||
printf("run_test18() - Error: %s\tExpression: %s\n",
|
||||
parser.error().c_str(),
|
||||
expr_string.c_str());
|
||||
|
||||
failure = true;
|
||||
}
|
||||
|
||||
for (std::size_t i = 0; i < v0.size() - 4; ++i)
|
||||
{
|
||||
v.rebase(v0.data() + i);
|
||||
|
||||
T sum = expression.value();
|
||||
|
||||
if (not_equal(sum,s[i]))
|
||||
{
|
||||
printf("run_test18() - Error in evaluation! (9) Expression: %s Expected: %5.3f Computed: %5.3f\n",
|
||||
expr_string.c_str(),
|
||||
s[i],
|
||||
sum);
|
||||
|
||||
failure = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (failure)
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user