void TestFPGrowth::withConstraints() { QList<QStringList> transactions; transactions.append(QStringList() << "A" << "B" << "C" << "D"); transactions.append(QStringList() << "A" << "B"); transactions.append(QStringList() << "A" << "C"); transactions.append(QStringList() << "A" << "B" << "C"); transactions.append(QStringList() << "A" << "D"); transactions.append(QStringList() << "A" << "C" << "D"); transactions.append(QStringList() << "C" << "B"); transactions.append(QStringList() << "B" << "C"); transactions.append(QStringList() << "C" << "D"); transactions.append(QStringList() << "C" << "E"); Constraints constraints; constraints.addItemConstraint("A", Analytics::CONSTRAINT_POSITIVE_MATCH_ANY); FPNode<SupportCount>::resetLastNodeID(); ItemIDNameHash itemIDNameHash; ItemNameIDHash itemNameIDHash; ItemIDList sortedFrequentItemIDs; FPGrowth * fpgrowth = new FPGrowth(transactions, 0.4 * transactions.size(), &itemIDNameHash, &itemNameIDHash, &sortedFrequentItemIDs); fpgrowth->setConstraints(constraints); QList<FrequentItemset> frequentItemsets = fpgrowth->mineFrequentItemsets(FPGROWTH_SYNC); // Characteristics about the transactions above, and the found results // (*after* applying filtering): // * support: // - A: 6 // - B: 3 // - C: 4 // - D: 3 // - E: 0 // * minimum support = 0.4 // * number of transactions: 10 // * absolute min support: 4 // * items qualifying: A, C // * frequent itemsets: {{A}, {A, C}} // Helpful for debugging/expanding this test. // Currently, this should match: // (({A(0)}, sup: 6), ({C(2), A(0)}, sup: 4)) //qDebug() << frequentItemsets; // Verify the results. QCOMPARE(frequentItemsets, QList<FrequentItemset>() << FrequentItemset(ItemIDList() << 0 , 6) << FrequentItemset(ItemIDList() << 2 << 0, 4) ); delete fpgrowth; }