summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/plugin/quuid/tst_quuid.cpp')
-rw-r--r--tests/auto/corelib/plugin/quuid/tst_quuid.cpp48
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()