e = (pow(x, -1) + x) / (pow(x , 2) * 2 + 2);
d = pow(x * 2, -1);
result += check_normal(e, d);
+
+ // Fraction cancellation with rational coefficients
+ e = (pow(x, 2) - pow(y, 2)) / pow(x/2 - y/2, 3);
+ d = (8 * x + 8 * y) / (pow(x, 2) + pow(y, 2) - x * y * 2);
+ result += check_normal(e, d);
+
+ // Fraction cancellation with rational coefficients
+ e = z/5 * (x/7 + y/10) / (x/14 + y/20);
+ d = 2*z/5;
+ result += check_normal(e, d);
// Distribution of powers
e = pow(x/y, 2);
ex d = pow(e1 + 1, 2);
ex f = d * pow(e2 - 2, 2);
ex g = d * pow(e1 + 2, 2);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 2, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;
ex d = e1 + 1;
ex f = d * (e1 - 2);
ex g = d * (e1 + 2);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 3, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;
ex d = e1 + 1;
ex f = d * (e1 - 2);
ex g = d * (e2 + 2);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 3p, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;
ex d = e1 + 1;
ex f = d * (e2 - 1);
ex g = d * pow(e3 + 2, 2);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 4, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;
ex d = e1 - 3;
ex f = d * (e2 + 3);
ex g = d * (e3 - 3);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 5, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;
ex d = e1 - 1;
ex f = d * (e1 + 3);
ex g = d * (e1 - 3);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 5p, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;
ex d = pow(x, j) * y * (z - 1);
ex f = d * (pow(x, j) + pow(y, j + 1) * pow(z, j) + 1);
ex g = d * (pow(x, j + 1) + pow(y, j) * pow(z, j + 1) - 7);
- ex r = gcd(f, g);
+ ex r = gcd(f.expand(), g.expand());
if (!(r - d).expand().is_zero()) {
clog << "case 6, gcd(" << f << "," << g << ") = " << r << " (should be " << d << ")" << endl;
return 1;