Warning, file /utilities/okteta/kasten/controllers/test/allprimitivetypestest.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  *    This file is part of the Okteta Kasten module, made within the KDE community.
0003  *
0004  *    SPDX-FileCopyrightText: 2012 Alex Richardson <alex.richardson@gmx.de>
0005  *
0006  *    SPDX-License-Identifier: LGPL-2.1-or-later
0007 */
0008 
0009 #include <QTest>
0010 #include <QScopedPointer>
0011 
0012 #include <Okteta/ByteArrayModel>
0013 #include "view/structures/allprimitivetypes.hpp"
0014 
0015 class AllPrimitiveTypesTest : public QObject
0016 {
0017     Q_OBJECT
0018 
0019 private Q_SLOTS:
0020     void initTestCase();
0021     void readLittleEndian();
0022     void readBigEndian();
0023     void testValuesMatch();
0024 
0025 private:
0026     template <typename T> inline T readLittle(quint8 bitOffset)
0027     {
0028         return AllPrimitiveTypes::readValue<T>(model.data(), 0, QSysInfo::LittleEndian, bitOffset);
0029     }
0030     template <typename T> inline T readBig(quint8 bitOffset)
0031     {
0032         return AllPrimitiveTypes::readValue<T>(model.data(), 0, QSysInfo::BigEndian, bitOffset);
0033     }
0034 
0035 private:
0036     QScopedPointer<Okteta::ByteArrayModel> model;
0037 };
0038 
0039 static constexpr Okteta::Byte data[9] =
0040 { 0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0, 0x00 };
0041 
0042 inline void AllPrimitiveTypesTest::initTestCase()
0043 {
0044     auto* copy = new Okteta::Byte[sizeof(data)];
0045     memcpy(copy, data, sizeof(data));
0046     model.reset(new Okteta::ByteArrayModel(copy, sizeof(data)));
0047     model->setAutoDelete(true);
0048     QCOMPARE(model->size(), Okteta::Size(sizeof(data)));
0049 }
0050 
0051 void AllPrimitiveTypesTest::testValuesMatch()
0052 {
0053     QCOMPARE((int)sizeof(AllPrimitiveTypes), 8);
0054     AllPrimitiveTypes test = Q_UINT64_C(0x1234567890abcdef);
0055     QCOMPARE(test.value<qint8>(), qint8(0xef));
0056     QCOMPARE(test.value<quint8>(), quint8(0xef));
0057     QCOMPARE(test.value<qint16>(), qint16(0xcdef));
0058     QCOMPARE(test.value<quint16>(), quint16(0xcdef));
0059     QCOMPARE(test.value<qint32>(), qint32(0x90abcdef));
0060     QCOMPARE(test.value<quint32>(), quint32(0x90abcdef));
0061     QCOMPARE(test.value<qint64>(), Q_INT64_C(0x1234567890abcdef));
0062     QCOMPARE(test.value<quint64>(), Q_UINT64_C(0x1234567890abcdef));
0063     AllPrimitiveTypes test2 = Q_INT64_C(-0x1234567890abcdef);
0064     QVERIFY(test2 == Q_UINT64_C(0xedcba9876f543211));
0065 }
0066 
0067 inline void AllPrimitiveTypesTest::readLittleEndian()
0068 {
0069     QCOMPARE(readLittle<quint8>(0), quint8(0x12u));
0070     QCOMPARE(readLittle<quint16>(0), quint16(0x3412u));
0071     QCOMPARE(readLittle<quint32>(0), quint32(0x78563412u));
0072     QCOMPARE(readLittle<quint64>(0), Q_UINT64_C(0xf0debc9a78563412));
0073     // shifted by 4
0074     // this is the way gcc handles it on little endian systems
0075     QCOMPARE(readLittle<quint8>(4), quint8(0x41u));
0076     QCOMPARE(readLittle<quint16>(4), quint16(0x6341u));
0077     QCOMPARE(readLittle<quint32>(4), quint32(0xa7856341u));
0078     QCOMPARE(readLittle<quint64>(4), Q_UINT64_C(0x0f0debc9a7856341));
0079 
0080     // now read a quint16 with bitOffset 1 to 7
0081     QCOMPARE(readLittle<quint16>(1), quint16(0x1a09u));
0082     QCOMPARE(readLittle<quint16>(2), quint16(0x8d04u));
0083     QCOMPARE(readLittle<quint16>(3), quint16(0xc682u));
0084     QCOMPARE(readLittle<quint16>(4), quint16(0x6341u));
0085     QCOMPARE(readLittle<quint16>(5), quint16(0xb1a0u));
0086     QCOMPARE(readLittle<quint16>(6), quint16(0x58d0u));
0087     QCOMPARE(readLittle<quint16>(7), quint16(0xac68u));
0088 
0089 }
0090 
0091 /**
0092  * 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 | 7 6 5 4 | 3 2 1 0 |
0093  * ------------------|-------------------|-------------------|
0094  * 0 0 0 1 | 0 0 1 0 | 0 0 1 1 | 0 1 0 0 | 0 1 0 1 | 0 1 1 0 |
0095  */
0096 
0097 inline void AllPrimitiveTypesTest::readBigEndian()
0098 {
0099     QCOMPARE(readBig<quint8>(0), quint8(0x12u));
0100     QCOMPARE(readBig<quint16>(0), quint16(0x1234u));
0101     QCOMPARE(readBig<quint32>(0), quint32(0x12345678u));
0102     QCOMPARE(readBig<quint64>(0), Q_UINT64_C(0x123456789abcdef0));
0103 
0104     QCOMPARE(readBig<quint8>(4), quint8(0x23u));
0105     QCOMPARE(readBig<quint16>(4), quint16(0x2345u));
0106 
0107     QCOMPARE(readBig<quint16>(1), quint16(0x2468u));
0108     QCOMPARE(readBig<quint16>(2), quint16(0x48d1u));
0109     QCOMPARE(readBig<quint16>(3), quint16(0x91a2u));
0110     QCOMPARE(readBig<quint16>(4), quint16(0x2345u));
0111     QCOMPARE(readBig<quint16>(5), quint16(0x468au));
0112     QCOMPARE(readBig<quint16>(6), quint16(0x8d15u));
0113     QCOMPARE(readBig<quint16>(7), quint16(0x1a2bu));
0114 
0115 }
0116 
0117 QTEST_GUILESS_MAIN(AllPrimitiveTypesTest)
0118 
0119 #include "allprimitivetypestest.moc"