File indexing completed on 2024-04-28 03:51:39

0001 /*
0002     This file is part of the KDE Baloo project.
0003     SPDX-FileCopyrightText: 2015 Vishesh Handa <vhanda@kde.org>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "phraseanditerator.h"
0009 #include "vectorpositioninfoiterator.h"
0010 #include "positioninfo.h"
0011 
0012 #include <QTest>
0013 
0014 using namespace Baloo;
0015 
0016 class PhraseAndIteratorTest : public QObject
0017 {
0018     Q_OBJECT
0019 private Q_SLOTS:
0020     void test();
0021     void testNullIterators();
0022 };
0023 
0024 void PhraseAndIteratorTest::test()
0025 {
0026     // Term 1
0027     PositionInfo pi2_1; // pi<doc_id>_<term>
0028     pi2_1.docId = 2;
0029     pi2_1.positions = {5, 9};
0030 
0031     PositionInfo pi4_1;
0032     pi4_1.docId = 4;
0033     pi4_1.positions = {4, 2};
0034 
0035     QVector<PositionInfo> vec1;
0036     vec1 << pi2_1 << pi4_1;
0037 
0038     // Term 2
0039     PositionInfo pi2_2;
0040     pi2_2.docId = 2;
0041     pi2_2.positions = {6, 7};
0042 
0043     PositionInfo pi4_2;
0044     pi4_2.docId = 4;
0045     pi4_2.positions = {6, 2};
0046 
0047     PositionInfo pi7_2;
0048     pi7_2.docId = 7;
0049     pi7_2.positions = {1, 4, 2};
0050 
0051     QVector<PositionInfo> vec2;
0052     vec2 << pi2_2 << pi4_2 << pi7_2;
0053 
0054     VectorPositionInfoIterator* it1 = new VectorPositionInfoIterator(vec1);
0055     VectorPositionInfoIterator* it2 = new VectorPositionInfoIterator(vec2);
0056 
0057     QVector<VectorPositionInfoIterator*> vec = {it1, it2};
0058     PhraseAndIterator it(vec);
0059     QCOMPARE(it.docId(), static_cast<quint64>(0));
0060 
0061     // The Query is "term1 term2". term1 must appear one position before term2
0062     QVector<quint64> result = {2};
0063     for (quint64 val : result) {
0064         QCOMPARE(it.next(), static_cast<quint64>(val));
0065         QCOMPARE(it.docId(), static_cast<quint64>(val));
0066     }
0067     QCOMPARE(it.next(), static_cast<quint64>(0));
0068     QCOMPARE(it.docId(), static_cast<quint64>(0));
0069 }
0070 
0071 void PhraseAndIteratorTest::testNullIterators()
0072 {
0073     // Term 1
0074     PositionInfo pi2_1;
0075     pi2_1.docId = 2;
0076     pi2_1.positions = {5, 9};
0077 
0078     QVector<PositionInfo> vec1;
0079     vec1 << pi2_1;
0080 
0081     // Term 2
0082     PositionInfo pi2_2;
0083     pi2_2.docId = 2;
0084     pi2_2.positions = {6, 7};
0085 
0086     QVector<PositionInfo> vec2;
0087     vec2 << pi2_2;
0088 
0089     VectorPositionInfoIterator* it1 = new VectorPositionInfoIterator(vec1);
0090     VectorPositionInfoIterator* it2 = new VectorPositionInfoIterator(vec2);
0091 
0092     QVector<VectorPositionInfoIterator*> vec = {it1, nullptr, it2};
0093     PhraseAndIterator it(vec);
0094     QCOMPARE(it.docId(), static_cast<quint64>(0));
0095     QCOMPARE(it.next(), static_cast<quint64>(0));
0096     QCOMPARE(it.docId(), static_cast<quint64>(0));
0097 }
0098 
0099 QTEST_MAIN(PhraseAndIteratorTest)
0100 
0101 #include "phraseanditeratortest.moc"