diff options
Diffstat (limited to 'tests/auto/corelib/plugin/quuid/tst_quuid.cpp')
-rw-r--r-- | tests/auto/corelib/plugin/quuid/tst_quuid.cpp | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp index e2f8762080..c5ce490b61 100644 --- a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp +++ b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp @@ -1,5 +1,5 @@ // Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only #include <QTest> @@ -26,6 +26,7 @@ private slots: void toRfc4122(); void fromRfc4122(); void id128(); + void uint128(); void createUuidV3OrV5(); void check_QDataStream(); void isNull(); @@ -243,6 +244,51 @@ void tst_QUuid::id128() leBytesA.data[15 - i] = bytesA.data[i]; QCOMPARE(QUuid(leBytesA, QSysInfo::LittleEndian), uuidA); QVERIFY(memcmp(uuidA.toBytes(QSysInfo::LittleEndian).data, leBytesA.data, sizeof(leBytesA)) == 0); + + // check the new q{To,From}{Big,Little}Endian() overloads + QUuid::Id128Bytes roundtrip = qFromLittleEndian(qToLittleEndian(bytesA)); + QVERIFY(memcmp(roundtrip.data, bytesA.data, sizeof(bytesA)) == 0); + roundtrip = qFromBigEndian(qToBigEndian(bytesA)); + QVERIFY(memcmp(roundtrip.data, bytesA.data, sizeof(bytesA)) == 0); +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + const QUuid::Id128Bytes beBytesA = qToBigEndian(leBytesA); + QVERIFY(memcmp(beBytesA.data, bytesA.data, sizeof(beBytesA)) == 0); + const QUuid::Id128Bytes otherLeBytesA = qFromBigEndian(bytesA); + QVERIFY(memcmp(otherLeBytesA.data, leBytesA.data, sizeof(leBytesA)) == 0); +#else // Q_BIG_ENDIAN + const QUuid::Id128Bytes otherLeBytesA = qToLittleEndian(bytesA); + QVERIFY(memcmp(otherLeBytesA.data, leBytesA.data, sizeof(leBytesA)) == 0); + const QUuid::Id128Bytes beBytesA = qFromLittleEndian(leBytesA); + QVERIFY(memcmp(beBytesA.data, bytesA.data, sizeof(beBytesA)) == 0); +#endif // Q_BYTE_ORDER == Q_LITTLE_ENDIAN +} + +void tst_QUuid::uint128() +{ +#ifdef QT_SUPPORTS_INT128 + constexpr quint128 u = Q_UINT128_C(0xfc69b59e'cc344436'a43cee95'd128b8c5); // This is LE + constexpr quint128 be = qToBigEndian(u); + constexpr QUuid uuid = QUuid::fromUInt128(be); + static_assert(uuid.toUInt128() == be, "Round-trip through QUuid failed"); + + QCOMPARE(uuid, uuidA); + QCOMPARE(uuid.toUInt128(), be); + + quint128 le = qFromBigEndian(be); + QCOMPARE(uuid.toUInt128(QSysInfo::LittleEndian), le); + QCOMPARE(QUuid::fromUInt128(le, QSysInfo::LittleEndian), uuidA); + + QUuid::Id128Bytes bytes = { .data128 = { qToBigEndian(u) } }; + QUuid uuid2(bytes); + QCOMPARE(uuid2, uuid); + + // verify that toBytes() and toUInt128() provide bytewise similar result + constexpr quint128 val = uuid.toUInt128(); + bytes = uuid.toBytes(); + QVERIFY(memcmp(&val, bytes.data, sizeof(val)) == 0); +#else + QSKIP("This platform has no support for 128-bit integer"); +#endif } void tst_QUuid::createUuidV3OrV5() |