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"