File indexing completed on 2024-04-21 05:18:10

0001 /*
0002   SPDX-FileCopyrightText: 2011 Volker Krause <vkrause@kde.org>
0003 
0004   SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "kmime_message.h"
0008 #include "kmime_content_p.h"
0009 #include "kmime_headers_p.h"
0010 
0011 #include <QTest>
0012 #include <QObject>
0013 #include <QDebug>
0014 
0015 using namespace KMime;
0016 using namespace KMime::Headers;
0017 using namespace KMime::Headers::Generics;
0018 
0019 // this is to ensure we don't accidentally increase the size of memory hotspots
0020 // and to help with optimizing memory use of these structures
0021 class SizeTest : public QObject
0022 {
0023     Q_OBJECT
0024 private Q_SLOTS:
0025 
0026     void testContent()
0027     {
0028         qDebug() << sizeof(Content);
0029         QVERIFY(sizeof(Content) <= 16);
0030         qDebug() << sizeof(ContentPrivate);
0031         QVERIFY(sizeof(ContentPrivate) <=
0032                 (sizeof(QByteArray) * 5 + sizeof(QList<Content *>) * 2 + 32));
0033         qDebug() << sizeof(Message);
0034         QCOMPARE(sizeof(Message), sizeof(Content));
0035     }
0036 
0037     void testHeaders()
0038     {
0039         qDebug() << sizeof(Headers::Base);
0040         QVERIFY(sizeof(Base) <= 16);
0041         QCOMPARE(sizeof(Unstructured), sizeof(Base));
0042         QCOMPARE(sizeof(Structured), sizeof(Base));
0043         QCOMPARE(sizeof(Address), sizeof(Base));
0044         QCOMPARE(sizeof(MailboxList), sizeof(Base));
0045         QCOMPARE(sizeof(SingleMailbox), sizeof(Base));
0046         QCOMPARE(sizeof(AddressList), sizeof(Base));
0047         QCOMPARE(sizeof(Ident), sizeof(Base));
0048         QCOMPARE(sizeof(SingleIdent), sizeof(Base));
0049         QCOMPARE(sizeof(Token), sizeof(Base));
0050         QCOMPARE(sizeof(PhraseList), sizeof(Base));
0051         QCOMPARE(sizeof(DotAtom), sizeof(Base));
0052         QCOMPARE(sizeof(Parametrized), sizeof(Base));
0053         QCOMPARE(sizeof(ReturnPath), sizeof(Base));
0054         QCOMPARE(sizeof(MailCopiesTo), sizeof(Base));
0055         QCOMPARE(sizeof(ContentTransferEncoding), sizeof(Base));
0056         QCOMPARE(sizeof(ContentID), sizeof(Base));
0057         QCOMPARE(sizeof(ContentType), sizeof(Base));
0058         QCOMPARE(sizeof(Generic), sizeof(Base));
0059         QCOMPARE(sizeof(Control), sizeof(Base));
0060         QCOMPARE(sizeof(Date), sizeof(Base));
0061         QCOMPARE(sizeof(Newsgroups), sizeof(Base));
0062         QCOMPARE(sizeof(Lines), sizeof(Base));
0063     }
0064 
0065 #define VERIFYSIZE( class, limit ) \
0066     qDebug() << #class << sizeof( class ); \
0067     QVERIFY( sizeof( class ) <= limit );
0068 
0069     void testHeadersPrivate()
0070     {
0071         VERIFYSIZE(BasePrivate, sizeof(QByteArray));
0072         VERIFYSIZE(UnstructuredPrivate, sizeof(BasePrivate) + sizeof(QString));
0073         VERIFYSIZE(StructuredPrivate, sizeof(BasePrivate));     // empty
0074         VERIFYSIZE(AddressPrivate, sizeof(StructuredPrivate));
0075         VERIFYSIZE(MailboxListPrivate,
0076                    sizeof(BasePrivate) + sizeof(QList<Types::Mailbox>));
0077         VERIFYSIZE(SingleMailboxPrivate, sizeof(MailboxListPrivate));
0078         VERIFYSIZE(AddressListPrivate, sizeof(BasePrivate) + sizeof(KMime::Types::AddressList));
0079         VERIFYSIZE(IdentPrivate, sizeof(AddressListPrivate) + sizeof(KMime::Types::AddrSpecList) + sizeof(QByteArray));
0080         VERIFYSIZE(SingleIdentPrivate, sizeof(IdentPrivate));
0081         VERIFYSIZE(TokenPrivate, sizeof(StructuredPrivate) + sizeof(QByteArray));
0082         VERIFYSIZE(PhraseListPrivate, sizeof(StructuredPrivate) + sizeof(QStringList));
0083         VERIFYSIZE(DotAtomPrivate, sizeof(StructuredPrivate) + sizeof(QByteArray));
0084         VERIFYSIZE(ParametrizedPrivate, sizeof(StructuredPrivate) + sizeof(QMap<QString, QString>));
0085         VERIFYSIZE(ReturnPathPrivate, sizeof(AddressPrivate) + sizeof(Types::Mailbox));
0086         VERIFYSIZE(MailCopiesToPrivate, sizeof(AddressListPrivate) + 8);
0087         VERIFYSIZE(ContentTransferEncodingPrivate, sizeof(TokenPrivate) + 8);
0088         VERIFYSIZE(ContentIDPrivate, sizeof(SingleIdentPrivate));
0089         VERIFYSIZE(ContentTypePrivate, sizeof(ParametrizedPrivate) + sizeof(QByteArray) + 8);
0090         VERIFYSIZE(GenericPrivate, sizeof(UnstructuredPrivate) + 8);
0091         VERIFYSIZE(ControlPrivate, sizeof(StructuredPrivate) + 2*sizeof(QByteArray));
0092         VERIFYSIZE(DatePrivate, sizeof(StructuredPrivate) + 8);
0093         VERIFYSIZE(NewsgroupsPrivate,
0094                    sizeof(StructuredPrivate) + sizeof(QList<QByteArray>));
0095         VERIFYSIZE(LinesPrivate, sizeof(StructuredPrivate) + 8);
0096     }
0097 };
0098 
0099 QTEST_MAIN(SizeTest)
0100 
0101 #include "sizetest.moc"