summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2022-11-18 12:57:09 -0800
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2023-05-20 04:59:43 +0000
commit8566c2db85a6f579a1a0432d0b7621633158e04c (patch)
treee3cec44d246660ac591803a7413a3e3122213a8f /tests
parentbefda1accab417ce5f55cb11816e6ded51af55e3 (diff)
QUuid: add support for 128-bit integers
[ChangeLog][QtCore][QUuid] Added support for converting between QUuid and quint128, on platforms that offer 128-bit integer types (all 64-bit ones supported by Qt, except MSVC). Change-Id: Id8e48e8f498c4a029619fffd1728c9553e871df5 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/corelib/plugin/quuid/tst_quuid.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
index e2f8762080..e759bdac85 100644
--- a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
+++ b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
@@ -26,6 +26,7 @@ private slots:
void toRfc4122();
void fromRfc4122();
void id128();
+ void uint128();
void createUuidV3OrV5();
void check_QDataStream();
void isNull();
@@ -245,6 +246,31 @@ void tst_QUuid::id128()
QVERIFY(memcmp(uuidA.toBytes(QSysInfo::LittleEndian).data, leBytesA.data, sizeof(leBytesA)) == 0);
}
+void tst_QUuid::uint128()
+{
+#ifdef __SIZEOF_INT128__
+ constexpr quint128 u = quint128(Q_UINT64_C(0xfc69b59ecc344436)) << 64
+ | Q_UINT64_C(0xa43cee95d128b8c5);
+ constexpr QUuid uuid(u);
+ static_assert(uuid.toUInt128() == u, "Round-trip through QUuid failed");
+
+ QCOMPARE(uuid, uuidA);
+ QCOMPARE(quint64(uuid.toUInt128() >> 64), quint64(u >> 64));
+ QCOMPARE(quint64(uuid.toUInt128()), quint64(u));
+
+ quint128 le = qFromBigEndian(u);
+ QCOMPARE(quint64(uuid.toUInt128(QSysInfo::LittleEndian) >> 64), quint64(le >> 64));
+ QCOMPARE(quint64(uuid.toUInt128(QSysInfo::LittleEndian)), quint64(le));
+ QCOMPARE(QUuid(le, QSysInfo::LittleEndian), uuidA);
+
+ QUuid::Id128Bytes bytes = { .data128 = { qToBigEndian(u) } };
+ QUuid uuid2(bytes);
+ QCOMPARE(uuid2, uuid);
+#else
+ QSKIP("This platform has no support for 128-bit integer");
+#endif
+}
+
void tst_QUuid::createUuidV3OrV5()
{
//"www.widgets.com" is also from RFC4122