index 2006a325f4537c5d4dd4da50245d1077e88e80ab..01e5af1ee323e6d436da63d3f2ea8b976ea3707a 100644 (file)
@@ -3,7 +3,7 @@
*  Factorization test suite. */

/*
- *  GiNaC Copyright (C) 1999-2011 Johannes Gutenberg University Mainz, Germany
+ *  GiNaC Copyright (C) 1999-2014 Johannes Gutenberg University Mainz, Germany
*
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
@@ -184,6 +184,33 @@ static unsigned exam_factor3()
return result;
}

+static unsigned check_factorization(const exvector& factors)
+{
+       ex e = (new mul(factors))->setflag(status_flags::dynallocated);
+       ex ef = factor(e.expand());
+       if (ef.nops() != factors.size()) {
+               clog << "wrong number of factors, expected " << factors.size() <<
+                       ", got " << ef.nops();
+               return 1;
+       }
+       for (size_t i = 0; i < ef.nops(); ++i) {
+               if (find(factors.begin(), factors.end(), ef.op(i)) == factors.end()) {
+                       clog << "wrong factorization: term not found: " << ef.op(i);
+                       return 1;
+               }
+       }
+       return 0;
+}
+
+static unsigned factor_integer_content_bug()
+{
+       exvector factors;
+       return check_factorization(factors);
+}
+
unsigned exam_factor()
{
unsigned result = 0;
@@ -193,6 +220,8 @@ unsigned exam_factor()
result += exam_factor1(); cout << '.' << flush;
result += exam_factor2(); cout << '.' << flush;
result += exam_factor3(); cout << '.' << flush;
+       result += factor_integer_content_bug();
+       cout << '.' << flush;

return result;
}