TEST(ExpressionProduct, productExp) { TVP TEST_TRUE = newBool(true); TVP result = productExp(); EXPECT_EQ (true,equals(TEST_TRUE,result)); recursiveFree(result); recursiveFree (TEST_TRUE); }
SNode SNode::multiplyParenthesesInProduct() const { ENTERMETHOD(); CHECKNODETYPE(*this,NT_PRODUCT); const FactorArray &a = getFactorArray(); const size_t n = a.size(); FactorArray newFactorArray(a.getTree(), n); for(size_t i = 0; i < n; i++) { SNode f = a[i]; newFactorArray *= powerExp(f.base().multiplyParentheses(), f.exponent().multiplyParentheses()); } BitSet done(newFactorArray.size() + 1); do { FactorArray tmp = newFactorArray; newFactorArray.clear(); done.setCapacity(tmp.size() + 1); done.clear(); for(size_t i1 = 1; i1 < tmp.size(); i1++) { if(done.contains(i1)) continue; SNode f1 = tmp[i1]; if((f1.base().getSymbol() == SUM) && !f1.exponent().isOne()) { continue; } for(size_t i2 = 0; i2 < i1; i2++) { if(done.contains(i1)) break; if(done.contains(i2)) continue; SNode f2 = tmp[i2]; if((f2.base().getSymbol() == SUM) && !f2.exponent().isOne()) { continue; } if(f1.base().getSymbol() == SUM) { newFactorArray *= multiplyFactorSum(f2, f1.base()); done.add(i1); done.add(i2); } else if(f2.base().getSymbol() == SUM) { newFactorArray *= multiplyFactorSum(f1, f2.base()); done.add(i1); done.add(i2); } } } for(size_t i = 0; i < tmp.size(); i++) { if(!done.contains(i)) { newFactorArray *= tmp[i]; } } } while(!done.isEmpty()); SNode result = productExp(newFactorArray); RETURNNODE( result ); }