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 |