X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_normalization.cpp;h=17cf83db1ea1e83cc37c3db5424ee75edc4a1175;hp=7ed7464d8b5d167988eaabcf9c25764617309e3d;hb=ef7787a325ea1f272ea08d78f2b86c48b6b2b286;hpb=38129d5d3880156f6f217f94855553bf4549a960 diff --git a/check/exam_normalization.cpp b/check/exam_normalization.cpp index 7ed7464d..17cf83db 100644 --- a/check/exam_normalization.cpp +++ b/check/exam_normalization.cpp @@ -252,6 +252,20 @@ static unsigned exam_exponent_law() result += check_normal(e, den); } + // Negative exponents + e = (exp(2*x)-exp(-2*x))/(exp(x)-exp(-x)); + ex en = e.normal(); + // Either exp(x) or exp(-x) can be viewed as a "symbol" during run-time + // thus two different forms of the result are possible + ex r1 = (exp(2*x)+1)/exp(x) ; + ex r2 = (exp(-2*x)+1)/exp(-x); + + if (!en.is_equal(r1) && !en.is_equal(r2)) { + clog << "normal form of " << e << " erroneously returned " + << en << " (should be " << r1 << " or " << r2 << ")" << endl; + result += 1; + } + return result; } @@ -305,6 +319,12 @@ static unsigned exam_power_law() 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); + + // Negative powers + e = (b -pow(b,-1)); + e /= (pow(b, numeric(1,2)) - pow(b, numeric(-1,2))); + d = (b+1)*pow(b, numeric(-1,2)); + result += check_normal(e, d); } return result;