File indexing completed on 2024-05-19 15:06:22
0001 /* 0002 This file is part of the KDE Baloo project. 0003 SPDX-FileCopyrightText: 2016 Christian Ehrlicher <ch.ehrlicher@gmx.de> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 #include <QCryptographicHash> 0009 #include <QTest> 0010 #include "positioncodec.h" 0011 #include "positioninfo.h" 0012 0013 using namespace Baloo; 0014 0015 class PositionCodecTest : public QObject 0016 { 0017 Q_OBJECT 0018 public: 0019 PositionCodecTest() = default; 0020 ~PositionCodecTest() = default; 0021 private Q_SLOTS: 0022 void initTestCase(); 0023 void checkEncodeOutput(); 0024 void checkEncodeOutput2(); 0025 void checkEncodeOutput3(); 0026 private: 0027 QVector<PositionInfo> m_data; 0028 QVector<PositionInfo> m_data2; 0029 QVector<PositionInfo> m_data3; 0030 }; 0031 0032 QTEST_MAIN ( PositionCodecTest ) 0033 0034 void PositionCodecTest::initTestCase() 0035 { 0036 m_data.clear(); 0037 m_data.reserve(100); 0038 for(int i = 0; i < 100; ++i) 0039 { 0040 PositionInfo info; 0041 info.docId = (i + 1) * 4711; 0042 info.positions.reserve(3000); 0043 for (int j = 0; j < 3000; j++) { 0044 info.positions.append((j + 1) * (i * 2)); 0045 } 0046 m_data.append(info); 0047 } 0048 0049 m_data2.clear(); 0050 m_data2.reserve(5000); 0051 for (int i = 0; i < 5000; i++) { 0052 PositionInfo info; 0053 info.docId = i; 0054 info.positions = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 0055 0056 m_data2.append(info); 0057 } 0058 0059 m_data3.clear(); 0060 m_data3.reserve(200); 0061 for (int i = 0; i < 200; i++) { 0062 PositionInfo info; 0063 info.docId = i; 0064 info.positions.reserve(30000); // > 2^14 -> 3 byte VarInt32 0065 for (int j = 0; j < 30000; j++) { 0066 info.positions.append((j + 1) * 200); // increment 200 -> 2 byte DiffVarInt32 0067 } 0068 0069 m_data3.append(info); 0070 } 0071 } 0072 0073 void PositionCodecTest::checkEncodeOutput() 0074 { 0075 const QByteArray ba = PositionCodec::encode(m_data); 0076 QCOMPARE(ba.size(), 409000); 0077 const QByteArray md5 = QCryptographicHash::hash(ba, QCryptographicHash::Md5).toHex(); 0078 QCOMPARE(md5, QByteArray("ae49eb3279bdda36ef91d29ce3c94c2c")); 0079 // and now decode the whole stuff 0080 QVector<PositionInfo> decodedData = PositionCodec::decode(ba); 0081 QCOMPARE(m_data, decodedData); 0082 } 0083 0084 void PositionCodecTest::checkEncodeOutput2() 0085 { 0086 const QByteArray ba = PositionCodec::encode(m_data2); 0087 QCOMPARE(ba.size(), (8 + 1 + 10) * 5000); // DocId, VarInt32 len, DiffVarInt position 0088 const QByteArray md5 = QCryptographicHash::hash(ba, QCryptographicHash::Md5).toHex(); 0089 QCOMPARE(md5, QByteArray("2f3710246331002e2332dce560ccd783")); 0090 // and now decode the whole stuff 0091 QVector<PositionInfo> decodedData = PositionCodec::decode(ba); 0092 QCOMPARE(m_data2, decodedData); 0093 } 0094 0095 void PositionCodecTest::checkEncodeOutput3() 0096 { 0097 const QByteArray ba = PositionCodec::encode(m_data3); 0098 QCOMPARE(ba.size(), (8 + 3 + (2 * 30000)) * 200); // DocId, VarInt32 len, DiffVarInt position 0099 const QByteArray md5 = QCryptographicHash::hash(ba, QCryptographicHash::Md5).toHex(); 0100 QCOMPARE(md5, QByteArray("79e942003c082073b4cee8e376fffdaa")); 0101 // and now decode the whole stuff 0102 QVector<PositionInfo> decodedData = PositionCodec::decode(ba); 0103 QCOMPARE(m_data3, decodedData); 0104 } 0105 0106 #include "positioncodectest.moc"