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"