diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-06-22 12:37:04 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-06-27 22:16:56 +0000 |
commit | 6ca65dd97d252d1618dd9870bf119b2d482e7eaf (patch) | |
tree | 3fb0e8923c9145270605dfb5d5b7e86ba81ea031 /tests/auto/corelib/global/qtendian/tst_qtendian.cpp | |
parent | 01d5aaa0f6bded240e9b0c8fb32a91d2afe8ae4d (diff) |
Move qle_bitfield to qendian_p.h
Makes the qle_bitfield template more generic and moves it to qendian_p.h
It is also hardened to be more reliable.
Change-Id: I53214ec99cceee4f5e8934ae688c99e555a5fb42
Reviewed-by: Ville Voutilainen <ville.voutilainen@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/global/qtendian/tst_qtendian.cpp')
-rw-r--r-- | tests/auto/corelib/global/qtendian/tst_qtendian.cpp | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/tests/auto/corelib/global/qtendian/tst_qtendian.cpp b/tests/auto/corelib/global/qtendian/tst_qtendian.cpp index 915e40954b..6934818dcf 100644 --- a/tests/auto/corelib/global/qtendian/tst_qtendian.cpp +++ b/tests/auto/corelib/global/qtendian/tst_qtendian.cpp @@ -29,6 +29,7 @@ #include <QtTest/QtTest> #include <QtCore/qendian.h> +#include <QtCore/private/qendian_p.h> class tst_QtEndian: public QObject @@ -41,6 +42,11 @@ private slots: void toBigEndian(); void toLittleEndian(); + + void endianIntegers_data(); + void endianIntegers(); + + void endianBitfields(); }; struct TestData @@ -129,5 +135,83 @@ void tst_QtEndian::toLittleEndian() #undef ENDIAN_TEST +void tst_QtEndian::endianIntegers_data() +{ + QTest::addColumn<int>("val"); + + QTest::newRow("-30000") << -30000; + QTest::newRow("-1") << -1; + QTest::newRow("0") << 0; + QTest::newRow("1020") << 1020; + QTest::newRow("16385") << 16385; +} + +void tst_QtEndian::endianIntegers() +{ + QFETCH(int, val); + + qint16 vi16 = val; + qint32 vi32 = val; + qint64 vi64 = val; + quint16 vu16 = val; + quint32 vu32 = val; + quint64 vu64 = val; + +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + QCOMPARE(*reinterpret_cast<qint16_be*>(&vi16), vi16); + QCOMPARE(*reinterpret_cast<qint32_be*>(&vi32), vi32); + QCOMPARE(*reinterpret_cast<qint64_be*>(&vi64), vi64); + QCOMPARE(*reinterpret_cast<qint16_le*>(&vi16), qbswap(vi16)); + QCOMPARE(*reinterpret_cast<qint32_le*>(&vi32), qbswap(vi32)); + QCOMPARE(*reinterpret_cast<qint64_le*>(&vi64), qbswap(vi64)); + QCOMPARE(*reinterpret_cast<quint16_be*>(&vu16), vu16); + QCOMPARE(*reinterpret_cast<quint32_be*>(&vu32), vu32); + QCOMPARE(*reinterpret_cast<quint64_be*>(&vu64), vu64); + QCOMPARE(*reinterpret_cast<quint16_le*>(&vu16), qbswap(vu16)); + QCOMPARE(*reinterpret_cast<quint32_le*>(&vu32), qbswap(vu32)); + QCOMPARE(*reinterpret_cast<quint64_le*>(&vu64), qbswap(vu64)); +#else + QCOMPARE(*reinterpret_cast<qint16_be*>(&vi16), qbswap(vi16)); + QCOMPARE(*reinterpret_cast<qint32_be*>(&vi32), qbswap(vi32)); + QCOMPARE(*reinterpret_cast<qint64_be*>(&vi64), qbswap(vi64)); + QCOMPARE(*reinterpret_cast<qint16_le*>(&vi16), vi16); + QCOMPARE(*reinterpret_cast<qint32_le*>(&vi32), vi32); + QCOMPARE(*reinterpret_cast<qint64_le*>(&vi64), vi64); + QCOMPARE(*reinterpret_cast<quint16_be*>(&vu16), qbswap(vu16)); + QCOMPARE(*reinterpret_cast<quint32_be*>(&vu32), qbswap(vu32)); + QCOMPARE(*reinterpret_cast<quint64_be*>(&vu64), qbswap(vu64)); + QCOMPARE(*reinterpret_cast<quint16_le*>(&vu16), vu16); + QCOMPARE(*reinterpret_cast<quint32_le*>(&vu32), vu32); + QCOMPARE(*reinterpret_cast<quint64_le*>(&vu64), vu64); +#endif +} + +void tst_QtEndian::endianBitfields() +{ + union { + quint32_be_bitfield<21, 11> upper; + quint32_be_bitfield<10, 11> lower; + qint32_be_bitfield<0, 10> bottom; + } u; + + u.upper = 200; + QCOMPARE(u.upper, 200U); + u.lower = 1000; + u.bottom = -8; + QCOMPARE(u.lower, 1000U); + QCOMPARE(u.upper, 200U); + + u.lower += u.upper; + QCOMPARE(u.upper, 200U); + QCOMPARE(u.lower, 1200U); + + u.upper = 65536 + 7; + u.lower = 65535; + QCOMPARE(u.lower, 65535U & ((1<<11) - 1)); + QCOMPARE(u.upper, 7U); + + QCOMPARE(u.bottom, -8); +} + QTEST_MAIN(tst_QtEndian) #include "tst_qtendian.moc" |