diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2022-11-18 12:57:09 -0800 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-05-20 04:59:43 +0000 |
commit | 8566c2db85a6f579a1a0432d0b7621633158e04c (patch) | |
tree | e3cec44d246660ac591803a7413a3e3122213a8f /tests | |
parent | befda1accab417ce5f55cb11816e6ded51af55e3 (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.cpp | 26 |
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 |