C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html
This commit is contained in:
parent
d4df1f2266
commit
a420147e7a
|
@ -1656,7 +1656,6 @@ namespace exprtk
|
||||||
cleanup_branches<N>(branch_);
|
cleanup_branches<N>(branch_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <std::size_t NumBranches>
|
template <std::size_t NumBranches>
|
||||||
void init_branches(expression_ptr (&b)[NumBranches])
|
void init_branches(expression_ptr (&b)[NumBranches])
|
||||||
{
|
{
|
||||||
|
@ -2788,6 +2787,7 @@ namespace exprtk
|
||||||
ptr_t* p_;
|
ptr_t* p_;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
scoped_delete<Type,N>& operator=(const scoped_delete<Type,N>&);
|
scoped_delete<Type,N>& operator=(const scoped_delete<Type,N>&);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -784,6 +784,7 @@ inline bool run_test1()
|
||||||
std::cout << "run_test1() - Error: " << parser.error() << "\tExpression: " << expression_string << std::endl;
|
std::cout << "run_test1() - Error: " << parser.error() << "\tExpression: " << expression_string << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
expression.value();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -997,6 +998,22 @@ inline bool run_test6()
|
||||||
"x", "y", "z", "w", "u",
|
"x", "y", "z", "w", "u",
|
||||||
"x + y + z + w + u",
|
"x + y + z + w + u",
|
||||||
"x + y / z * w ^ u",
|
"x + y / z * w ^ u",
|
||||||
|
"x:=1.1", "y:=2.2", "z:=3.3", "w:=4.4", "u:=5.5",
|
||||||
|
"x<-1.1", "y<-2.2", "z<-3.3", "w<-4.4", "u<-5.5",
|
||||||
|
"x:=x+1.1", "y:=y+2.2", "z:=z+3.3", "w:=w+4.4", "u:=u+5.5",
|
||||||
|
"x<-x+1.1", "y<-y+2.2", "z<-z+3.3", "w<-w+4.4", "u<-u+5.5",
|
||||||
|
"x:=1.1+x", "y:=2.2+y", "z:=3.3+z", "w:=4.4+w", "u:=5.5+u",
|
||||||
|
"x<-1.1+x", "y<-2.2+y", "z<-3.3+z", "w<-4.4+w", "u<-5.5+u",
|
||||||
|
"x:=(x <= 1.1)",
|
||||||
|
"y:=(2.2 >= y)",
|
||||||
|
"z:=(3.3 and z)",
|
||||||
|
"w:=(4.4 or w)",
|
||||||
|
"u:=(u xor 5.5)",
|
||||||
|
"x<-(x <= 1.1)",
|
||||||
|
"y<-(2.2 >= y)",
|
||||||
|
"z<-(3.3 and z)",
|
||||||
|
"w<-(4.4 or w)",
|
||||||
|
"u<-(u xor 5.5)",
|
||||||
"min(x,y) + min(x,y,z) + min(x,y,z,w) + min(x,y,z,w,y)",
|
"min(x,y) + min(x,y,z) + min(x,y,z,w) + min(x,y,z,w,y)",
|
||||||
"max(x,y) + max(x,y,z) + max(x,y,z,w) + max(x,y,z,w,y)",
|
"max(x,y) + max(x,y,z) + max(x,y,z,w) + max(x,y,z,w,y)",
|
||||||
"avg(x,y)",
|
"avg(x,y)",
|
||||||
|
@ -1144,12 +1161,24 @@ inline bool run_test7()
|
||||||
std::cout << "run_test7() - Error: " << parser.error() << "\tExpression: " << expression_string << std::endl;
|
std::cout << "run_test7() - Error: " << parser.error() << "\tExpression: " << expression_string << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
T result = expression.value();
|
|
||||||
const T pi = T(3.14159265358979323846);
|
const T pi = T(3.14159265358979323846);
|
||||||
if (not_equal<T>(result,(T(1)+(std::sin(x*pi)*(y/T(2)))/T(3)) * 10.0,0.000001))
|
|
||||||
|
T result = expression.value();
|
||||||
|
T expected = mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2) +
|
||||||
|
mf(sin(x*pi),y/2);
|
||||||
|
|
||||||
|
if (not_equal<T>(result,expected,0.0000001))
|
||||||
{
|
{
|
||||||
printf("run_test7() - Error Expected: %19.15f\tResult: %19.15f\n",
|
printf("run_test7() - Error Expected: %19.15f\tResult: %19.15f\n",
|
||||||
T(1)+(std::sin(x*pi)*(y/T(2)))/T(3),
|
expected,
|
||||||
result);
|
result);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue