Fix bug in mul::series() about asymptotic order term.
authorRichard Kreckel <kreckel@ginac.de>
Sun, 21 Apr 2019 19:43:45 +0000 (21:43 +0200)
committerRichard Kreckel <kreckel@ginac.de>
Sun, 21 Apr 2019 19:43:45 +0000 (21:43 +0200)
This reverts db81420a6195 and adds a test case.

Thanks to Feng Feng for reporting this.

check/exam_pseries.cpp
ginac/pseries.cpp

index 3752a1f..e59026c 100644 (file)
@@ -141,6 +141,10 @@ static unsigned exam_series1()
        d = pow(a, b) + (pow(a, b)*b/a)*x + (pow(a, b)*b*b/a/a/2 - pow(a, b)*b/a/a/2)*pow(x, 2) + Order(pow(x, 3));
        result += check_series(e, 0, d, 3);
 
+       e = a * (1 / (x * sin(x)) - sin(x) / x);
+       d = a * pow(x, -2) + Order(pow(x, -1));
+       result += check_series(e, 0, d, -1);
+
        return result;
 }
 
index e746220..4dba512 100644 (file)
@@ -959,9 +959,8 @@ ex mul::series(const relational & r, int order, unsigned options) const
 
        int degsum = std::accumulate(ldegrees.begin(), ldegrees.end(), 0);
 
-       if (degsum >= order) {
-               epvector epv { expair(Order(_ex1), order) };
-               return dynallocate<pseries>(r, std::move(epv));
+       if (degsum > order) {
+               return dynallocate<pseries>(r, epvector{{Order(_ex1), order}});
        }
 
        // Multiply with remaining terms