exam_misc.cpp (ginac-1.7.11.tar.bz2) | : | exam_misc.cpp (ginac-1.8.0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 92 | skipping to change at line 92 | |||
if (e != 1) { | if (e != 1) { | |||
clog << "e = pow(x,pow(a+b,2)-pow(a,2)-pow(b,2)-a*b*2).expand(); erroneously returned " | clog << "e = pow(x,pow(a+b,2)-pow(a,2)-pow(b,2)-a*b*2).expand(); erroneously returned " | |||
<< e << " instead of simplifying to 1." << endl; | << e << " instead of simplifying to 1." << endl; | |||
++result; | ++result; | |||
} | } | |||
return result; | return result; | |||
} | } | |||
static unsigned exam_sqrfree() | ||||
{ | ||||
unsigned result = 0; | ||||
symbol x("x"), y("y"); | ||||
ex e1, e2; | ||||
e1 = (1+x)*pow((2+x),2)*pow((3+x),3)*pow((4+x),4); | ||||
e2 = sqrfree(expand(e1),lst{x}); | ||||
if (e1 != e2) { | ||||
clog << "sqrfree(expand(" << e1 << ")) erroneously returned " | ||||
<< e2 << endl; | ||||
++result; | ||||
} | ||||
e1 = (x+y)*pow((x+2*y),2)*pow((x+3*y),3)*pow((x+4*y),4); | ||||
e2 = sqrfree(expand(e1)); | ||||
if (e1 != e2) { | ||||
clog << "sqrfree(expand(" << e1 << ")) erroneously returned " | ||||
<< e2 << endl; | ||||
++result; | ||||
} | ||||
e2 = sqrfree(expand(e1),lst{x}); | ||||
if (e1 != e2) { | ||||
clog << "sqrfree(expand(" << e1 << "),[x]) erroneously returned " | ||||
<< e2 << endl; | ||||
++result; | ||||
} | ||||
e2 = sqrfree(expand(e1),lst{y}); | ||||
if (e1 != e2) { | ||||
clog << "sqrfree(expand(" << e1 << "),[y]) erroneously returned " | ||||
<< e2 << endl; | ||||
++result; | ||||
} | ||||
e2 = sqrfree(expand(e1),lst{x,y}); | ||||
if (e1 != e2) { | ||||
clog << "sqrfree(expand(" << e1 << "),[x,y]) erroneously returned | ||||
" | ||||
<< e2 << endl; | ||||
++result; | ||||
} | ||||
return result; | ||||
} | ||||
/* Arithmetic Operators should behave just as one expects from built-in types. | /* Arithmetic Operators should behave just as one expects from built-in types. | |||
* When somebody screws up the operators this routine will most probably fail | * When somebody screws up the operators this routine will most probably fail | |||
* to compile. Unfortunately we can only test the stuff that is allowed, not | * to compile. Unfortunately we can only test the stuff that is allowed, not | |||
* what is forbidden (e.g. e1+e2 = 42) since that must not compile. :-( */ | * what is forbidden (e.g. e1+e2 = 42) since that must not compile. :-( */ | |||
static unsigned exam_operator_semantics() | static unsigned exam_operator_semantics() | |||
{ | { | |||
unsigned result = 0; | unsigned result = 0; | |||
ex e1, e2; | ex e1, e2; | |||
int i1, i2; | int i1, i2; | |||
skipping to change at line 301 | skipping to change at line 258 | |||
} | } | |||
if (e.has(y*y, has_options::algebraic)) | if (e.has(y*y, has_options::algebraic)) | |||
{ clog << "(x^3*y).has(y*y, has_options::algebraic) erroneously ret urned true." << endl; | { clog << "(x^3*y).has(y*y, has_options::algebraic) erroneously ret urned true." << endl; | |||
++result; | ++result; | |||
} | } | |||
return result; | return result; | |||
} | } | |||
/* Test suitable cases of the exponent power law: (e^t)^s=e^(ts). */ | ||||
static unsigned exam_exponent_power_law() | ||||
{ | ||||
unsigned result = 0; | ||||
symbol x("x"); | ||||
realsymbol s("s"); | ||||
possymbol t("t"); | ||||
exmap pwr_exp = | ||||
{ {pow(exp(x), 2), exp(2*x)}, | ||||
{pow(exp(s), t), exp(s*t)}, | ||||
{exp(x)*pow(exp(x),-1), 1} }; | ||||
for (auto e : pwr_exp) { | ||||
if (! (e.first.is_equal(e.second)) ) { | ||||
clog << "power of exponent " << e.first << " produces er | ||||
ror.\n"; | ||||
++result; | ||||
} | ||||
} | ||||
return result; | ||||
} | ||||
unsigned exam_misc() | unsigned exam_misc() | |||
{ | { | |||
unsigned result = 0; | unsigned result = 0; | |||
cout << "examining miscellaneous other things" << flush; | cout << "examining miscellaneous other things" << flush; | |||
result += exam_expand_subs(); cout << '.' << flush; | result += exam_expand_subs(); cout << '.' << flush; | |||
result += exam_expand_subs2(); cout << '.' << flush; | result += exam_expand_subs2(); cout << '.' << flush; | |||
result += exam_expand_power(); cout << '.' << flush; | result += exam_expand_power(); cout << '.' << flush; | |||
result += exam_sqrfree(); cout << '.' << flush; | ||||
result += exam_operator_semantics(); cout << '.' << flush; | result += exam_operator_semantics(); cout << '.' << flush; | |||
result += exam_subs(); cout << '.' << flush; | result += exam_subs(); cout << '.' << flush; | |||
result += exam_joris(); cout << '.' << flush; | result += exam_joris(); cout << '.' << flush; | |||
result += exam_subs_algebraic(); cout << '.' << flush; | result += exam_subs_algebraic(); cout << '.' << flush; | |||
result += exam_exponent_power_law(); cout << '.' << flush; | ||||
return result; | return result; | |||
} | } | |||
int main(int argc, char** argv) | int main(int argc, char** argv) | |||
{ | { | |||
return exam_misc(); | return exam_misc(); | |||
} | } | |||
End of changes. 4 change blocks. | ||||
45 lines changed or deleted | 25 lines changed or added |