File indexing completed on 2024-05-19 05:57:21

0001 // SPDX-FileCopyrightText: 2023 Plata Hill <plata.hill@kdemail.net>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 #include "../src/database.h"
0005 
0006 #include <QStandardPaths>
0007 #include <QTest>
0008 
0009 class DatabaseBenchmark : public QObject
0010 {
0011     Q_OBJECT
0012 private Q_SLOTS:
0013     void initTestCase()
0014     {
0015         QStandardPaths::setTestModeEnabled(true);
0016 
0017         Database::instance().execute(QStringLiteral("DELETE FROM \"Groups\";"));
0018         QCOMPARE(Database::instance().groupCount(), 0);
0019         Database::instance().execute(QStringLiteral("DELETE FROM Channels;"));
0020         QCOMPARE(Database::instance().channelCount(), 0);
0021         Database::instance().execute(QStringLiteral("DELETE FROM GroupChannels;"));
0022         Database::instance().execute(QStringLiteral("DELETE FROM Programs;"));
0023         Database::instance().execute(QStringLiteral("DELETE FROM ProgramCategories;"));
0024         Database::instance().execute(QStringLiteral("DELETE FROM Favorites;"));
0025         QCOMPARE(Database::instance().favoriteCount(), 0);
0026     }
0027 
0028     void testAddGroups()
0029     {
0030         QVector<GroupData> groups;
0031 
0032         for (int i = 0; i < 10000; ++i) {
0033             GroupData data;
0034             data.m_id = GroupId("Group" + QString::number(i));
0035             data.m_name = "Group";
0036             data.m_url = "GroupUrl";
0037             groups.push_back(data);
0038         }
0039 
0040         QBENCHMARK {
0041             Database::instance().addGroups(groups);
0042         }
0043 
0044         QCOMPARE(Database::instance().groupCount(), 10000);
0045     }
0046 
0047     void testGroups()
0048     {
0049         QBENCHMARK {
0050             const QVector<GroupData> groups = Database::instance().groups();
0051             QCOMPARE(groups.size(), 10000);
0052         }
0053     }
0054 
0055     void testAddChannels()
0056     {
0057         QList<ChannelData> channels;
0058 
0059         for (int i = 0; i < 10000; ++i) {
0060             ChannelData data;
0061             data.m_id = ChannelId("Channel" + QString::number(i));
0062             data.m_name = "Channel";
0063             data.m_url = "ChannelUrl";
0064             data.m_image = "ChannelImage";
0065             channels.push_back(data);
0066         }
0067 
0068         QBENCHMARK {
0069             Database::instance().addChannels(channels, GroupId("Group1"));
0070         }
0071 
0072         QCOMPARE(Database::instance().channelCount(), 10000);
0073     }
0074 
0075     void testGroupsForChannel()
0076     {
0077         QBENCHMARK {
0078             const QVector<GroupData> groups = Database::instance().groups(ChannelId("Channel1"));
0079             QCOMPARE(groups.size(), 1);
0080         }
0081     }
0082 
0083     void testAddFavorite()
0084     {
0085         QBENCHMARK {
0086             for (int i = 0; i < 100; ++i) {
0087                 Database::instance().addFavorite(ChannelId("Channel" + QString::number(i)));
0088             }
0089         }
0090     }
0091 
0092     void testFavorites()
0093     {
0094         QBENCHMARK {
0095             const QVector<ChannelId> favorites = Database::instance().favorites();
0096             QCOMPARE(favorites.size(), 100);
0097         }
0098     }
0099 
0100     void testChannelsOnlyFavorites()
0101     {
0102         QBENCHMARK {
0103             const QVector<ChannelData> channels = Database::instance().channels(true);
0104             QCOMPARE(channels.size(), 100);
0105         }
0106     }
0107 
0108     void testSortFavorites()
0109     {
0110         QVector<ChannelId> favorites;
0111         for (int i = 99; i >= 0; --i) {
0112             favorites.push_back(ChannelId("Channel" + QString::number(i)));
0113         }
0114 
0115         QBENCHMARK {
0116             Database::instance().sortFavorites(favorites);
0117         }
0118     }
0119 
0120     void testRemoveFavorite()
0121     {
0122         QBENCHMARK {
0123             Database::instance().removeFavorite(ChannelId("Channel50"));
0124         }
0125         QCOMPARE(Database::instance().favoriteCount(), 99);
0126     }
0127 
0128     void testAddPrograms()
0129     {
0130         QVector<ProgramData> programs;
0131 
0132         for (int i = 0; i < 10000; ++i) {
0133             ProgramData data;
0134             data.m_id = ProgramId("Program" + QString::number(i));
0135             data.m_url = "ProgramUrl";
0136             data.m_channelId = ChannelId("Channel1");
0137             data.m_startTime = QDateTime::fromString("2022-12-28T01:00:00", Qt::ISODate).addSecs(i);
0138             data.m_stopTime = QDateTime::fromString("2022-12-28T02:00:00", Qt::ISODate).addSecs(i);
0139             data.m_title = "ProgramTitle";
0140             data.m_subtitle = "ProgramSubtitle";
0141             data.m_description = "ProgramDescription";
0142             data.m_descriptionFetched = true;
0143             data.m_categories = {"Category1"};
0144             programs.push_back(data);
0145         }
0146 
0147         QBENCHMARK {
0148             Database::instance().addPrograms(programs);
0149         }
0150 
0151         QCOMPARE(Database::instance().programCount(ChannelId("Channel1")), 10000);
0152     }
0153 
0154     void testPrograms()
0155     {
0156         QBENCHMARK {
0157             const QMap<ChannelId, QVector<ProgramData>> programs = Database::instance().programs();
0158             QCOMPARE(programs.size(), 1);
0159             QCOMPARE(programs[ChannelId("Channel1")].size(), 10000);
0160         }
0161     }
0162 };
0163 
0164 QTEST_GUILESS_MAIN(DatabaseBenchmark)
0165 
0166 #include "databasebenchmark.moc"