X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=check%2Fexam_factor.cpp;h=9696a2b531daf372094e5c8e8ab4bda60894d683;hp=2006a325f4537c5d4dd4da50245d1077e88e80ab;hb=edfa67d26bac695b5ef9911f3cda3ff50232e35a;hpb=d023220cece92637c3e55051f127650f2131de44;ds=sidebyside diff --git a/check/exam_factor.cpp b/check/exam_factor.cpp index 2006a325..9696a2b5 100644 --- a/check/exam_factor.cpp +++ b/check/exam_factor.cpp @@ -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() +{ + parser reader; + exvector factors; + factors.push_back(reader("x+y+x*y")); + factors.push_back(reader("3*x+2*y")); + 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; }