"Fossies" - the Fresh Open Source Software Archive

Source code changes of the file "check/exam_normalization.cpp" betweenginac-1.7.11.tar.bz2 and ginac-1.8.0.tar.bz2

About: GiNaC (GiNaC is Not a CAS (Computer Algebra System)) is a C++ library for symbolic calculations.

exam_normalization.cpp  (ginac-1.7.11.tar.bz2):exam_normalization.cpp  (ginac-1.8.0.tar.bz2)
skipping to change at line 226 skipping to change at line 226
result += check_content(ex(-3)/4, x, ex(3)/4, ex(3)/4, 1); result += check_content(ex(-3)/4, x, ex(3)/4, ex(3)/4, 1);
result += check_content(-x/4, x, ex(1)/4, ex(1)/4, x); result += check_content(-x/4, x, ex(1)/4, ex(1)/4, x);
result += check_content(5*x-15, x, 5, 5, x-3); result += check_content(5*x-15, x, 5, 5, x-3);
result += check_content(5*x*y-15*y*y, x, 5, 5*y, x-3*y); result += check_content(5*x*y-15*y*y, x, 5, 5*y, x-3*y);
result += check_content(-15*x/2+ex(25)/3, x, ex(5)/6, ex(5)/6, 9*x-10); result += check_content(-15*x/2+ex(25)/3, x, ex(5)/6, ex(5)/6, 9*x-10);
result += check_content(-x*y, x, 1, y, x); result += check_content(-x*y, x, 1, y, x);
return result; return result;
} }
static unsigned exam_exponent_law()
{
unsigned result = 0;
ex e, d;
// simple case
e = exp(2*x)-1;
e /= exp(x)-1;
d = exp(x)+1;
result += check_normal(e, d);
// More involved with powers of two exponents
e = exp(15*x)+exp(12*x)+2*exp(10*x)+2*exp(7*x);
e /= exp(5*x)+exp(2*x);
d = pow(exp(5*x), 2) +2*exp(5*x);
result += check_normal(e, d);
lst bases = {
5*exp(3*x)+7, // Powers of a single exponent
5*exp(3*x)+7*exp(2*x), // Two different factors of a single vari
able
5*exp(3*x)+7*exp(2*y) // Exponent with different variable
};
for (auto den : bases) {
e = pow(den, 3).expand();
e /= pow(den, 2).expand();
result += check_normal(e, den);
}
return result;
}
static unsigned exam_power_law()
{
unsigned result = 0;
ex e, d;
lst bases = {x, pow(x, numeric(1,3)), exp(x), sin(x)}; // We run all chec
k for power base of different kinds
for ( auto b : bases ) {
// simple case
e = 4*b-9;
e /= 2*sqrt(b)-3;
d = 2*sqrt(b)+3;
result += check_normal(e, d);
// Fractional powers
e = 4*pow(b, numeric(2,3))-9;
e /= 2*pow(b, numeric(1,3))-3;
d = 2*pow(b, numeric(1,3))+3;
result += check_normal(e, d);
// Different powers with the same base
e = 4*b-9*sqrt(b);
e /= 2*sqrt(b)-3*pow(b, numeric(1,4));
d = 2*sqrt(b)+3*pow(b, numeric(1,4));
result += check_normal(e, d);
// Non-numeric powers
e = 4*pow(b, 2*y)-9;
e /= 2*pow(b, y)-3;
d = 2*pow(b, y)+3;
result += check_normal(e, d);
// Non-numeric fractional powers
e = 4*pow(b, y)-9;
e /= 2*pow(b, y/2)-3;
d = 2*pow(b, y/2)+3;
result += check_normal(e, d);
// Different non-numeric powers
e = 4*pow(b, 2*y)-9*pow(b, 2*z);
e /= 2*pow(b, y)-3*pow(b, z);
d = 2*pow(b, y)+3*pow(b, z);
result += check_normal(e, d);
// Different non-numeric fractional powers
e = 4*pow(b, y)-9*pow(b, z);
e /= 2*pow(b, y/2)-3*pow(b, z/2);
d = 2*pow(b, y/2)+3*pow(b, z/2);
result += check_normal(e, d);
}
return result;
}
unsigned exam_normalization() unsigned exam_normalization()
{ {
unsigned result = 0; unsigned result = 0;
cout << "examining rational function normalization" << flush; cout << "examining rational function normalization" << flush;
result += exam_normal1(); cout << '.' << flush; result += exam_normal1(); cout << '.' << flush;
result += exam_normal2(); cout << '.' << flush; result += exam_normal2(); cout << '.' << flush;
result += exam_normal3(); cout << '.' << flush; result += exam_normal3(); cout << '.' << flush;
result += exam_normal4(); cout << '.' << flush; result += exam_normal4(); cout << '.' << flush;
result += exam_content(); cout << '.' << flush; result += exam_content(); cout << '.' << flush;
result += exam_exponent_law(); cout << '.' << flush;
result += exam_power_law(); cout << '.' << flush;
return result; return result;
} }
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
return exam_normalization(); return exam_normalization();
} }
End of changes. 2 change blocks.
0 lines changed or deleted 91 lines changed or added