Fix return value of qbswap(qint128)
Should be qint128, not quint128. [ChangeLog][QtCore][QtEndian] Fixed return type of qbswap(qint128) (was: quint128). No tests for this exist, so no wonder it fell through. Added them. Amends befda1accab417ce5f55cb11816e6ded51af55e3. Change-Id: Ibf87724b1d500081caca46af1c598975964e04c0 Reviewed-by: Ivan Solovev <ivan.solovev@qt.io> (cherry picked from commit 7a829eaf51853e0852db28b8b8223e1a62a3db0c) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> (cherry picked from commit 377066e40799fe64cd823d1d69aea7cd539d04b4)
This commit is contained in:
parent
dcdf76ac69
commit
cf26c939d7
@ -116,7 +116,7 @@ inline constexpr quint128 qbswap(quint128 source)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline constexpr quint128 qbswap(qint128 source)
|
inline constexpr qint128 qbswap(qint128 source)
|
||||||
{
|
{
|
||||||
return qint128(qbswap(quint128(source)));
|
return qint128(qbswap(quint128(source)));
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,12 @@
|
|||||||
#include <QtCore/private/qendian_p.h>
|
#include <QtCore/private/qendian_p.h>
|
||||||
#include <QtCore/qsysinfo.h>
|
#include <QtCore/qsysinfo.h>
|
||||||
|
|
||||||
|
#if QT_SUPPORTS_INT128
|
||||||
|
#define ONLY_INT128(...) __VA_ARGS__
|
||||||
|
#else
|
||||||
|
#define ONLY_INT128(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
class tst_QtEndian: public QObject
|
class tst_QtEndian: public QObject
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -41,6 +47,9 @@ private slots:
|
|||||||
|
|
||||||
struct TestData
|
struct TestData
|
||||||
{
|
{
|
||||||
|
ONLY_INT128(
|
||||||
|
quint128 data128;
|
||||||
|
)
|
||||||
quint64 data64;
|
quint64 data64;
|
||||||
quint32 data32;
|
quint32 data32;
|
||||||
quint16 data16;
|
quint16 data16;
|
||||||
@ -57,6 +66,9 @@ template <> quint8 getData(const TestData &d) { return d.data8; }
|
|||||||
template <> quint16 getData(const TestData &d) { return d.data16; }
|
template <> quint16 getData(const TestData &d) { return d.data16; }
|
||||||
template <> quint32 getData(const TestData &d) { return d.data32; }
|
template <> quint32 getData(const TestData &d) { return d.data32; }
|
||||||
template <> quint64 getData(const TestData &d) { return d.data64; }
|
template <> quint64 getData(const TestData &d) { return d.data64; }
|
||||||
|
ONLY_INT128(
|
||||||
|
template <> quint128 getData(const TestData &d) { return d.data128; }
|
||||||
|
)
|
||||||
template <> float getData(const TestData &d) { return d.dataFloat; }
|
template <> float getData(const TestData &d) { return d.dataFloat; }
|
||||||
|
|
||||||
union RawTestData
|
union RawTestData
|
||||||
@ -74,6 +86,9 @@ Float int2Float(typename QIntegerForSizeof<Float>::Unsigned i)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const TestData inNativeEndian = {
|
static const TestData inNativeEndian = {
|
||||||
|
ONLY_INT128(
|
||||||
|
Q_UINT128_C(0x0123'4567'89ab'cdef'18ba'df00'd1da'cafe),
|
||||||
|
)
|
||||||
Q_UINT64_C(0x0123456789abcdef),
|
Q_UINT64_C(0x0123456789abcdef),
|
||||||
0x00c0ffee,
|
0x00c0ffee,
|
||||||
0xcafe,
|
0xcafe,
|
||||||
@ -83,6 +98,9 @@ static const TestData inNativeEndian = {
|
|||||||
'\0'
|
'\0'
|
||||||
};
|
};
|
||||||
static const RawTestData inBigEndian = {
|
static const RawTestData inBigEndian = {
|
||||||
|
ONLY_INT128(
|
||||||
|
"\x01\x23\x45\x67\x89\xab\xcd\xef\x18\xba\xdf\x00\xd1\xda\xca\xfe"
|
||||||
|
)
|
||||||
"\x01\x23\x45\x67\x89\xab\xcd\xef"
|
"\x01\x23\x45\x67\x89\xab\xcd\xef"
|
||||||
"\x00\xc0\xff\xee"
|
"\x00\xc0\xff\xee"
|
||||||
"\xca\xfe"
|
"\xca\xfe"
|
||||||
@ -91,6 +109,9 @@ static const RawTestData inBigEndian = {
|
|||||||
"\x01\x23\x45\x67\x89\xab\xcd\xef"
|
"\x01\x23\x45\x67\x89\xab\xcd\xef"
|
||||||
};
|
};
|
||||||
static const RawTestData inLittleEndian = {
|
static const RawTestData inLittleEndian = {
|
||||||
|
ONLY_INT128(
|
||||||
|
"\xfe\xca\xda\xd1\x00\xdf\xba\x18\xef\xcd\xab\x89\x67\x45\x23\x01"
|
||||||
|
)
|
||||||
"\xef\xcd\xab\x89\x67\x45\x23\x01"
|
"\xef\xcd\xab\x89\x67\x45\x23\x01"
|
||||||
"\xee\xff\xc0\x00"
|
"\xee\xff\xc0\x00"
|
||||||
"\xfe\xca"
|
"\xfe\xca"
|
||||||
@ -102,12 +123,18 @@ static const RawTestData inLittleEndian = {
|
|||||||
#define EXPAND_ENDIAN_TEST(endian) \
|
#define EXPAND_ENDIAN_TEST(endian) \
|
||||||
do { \
|
do { \
|
||||||
/* Unsigned tests */ \
|
/* Unsigned tests */ \
|
||||||
|
ONLY_INT128( \
|
||||||
|
ENDIAN_TEST(endian, quint, 128); \
|
||||||
|
) \
|
||||||
ENDIAN_TEST(endian, quint, 64); \
|
ENDIAN_TEST(endian, quint, 64); \
|
||||||
ENDIAN_TEST(endian, quint, 32); \
|
ENDIAN_TEST(endian, quint, 32); \
|
||||||
ENDIAN_TEST(endian, quint, 16); \
|
ENDIAN_TEST(endian, quint, 16); \
|
||||||
ENDIAN_TEST(endian, quint, 8); \
|
ENDIAN_TEST(endian, quint, 8); \
|
||||||
\
|
\
|
||||||
/* Signed tests */ \
|
/* Signed tests */ \
|
||||||
|
ONLY_INT128( \
|
||||||
|
ENDIAN_TEST(endian, qint, 128); \
|
||||||
|
) \
|
||||||
ENDIAN_TEST(endian, qint, 64); \
|
ENDIAN_TEST(endian, qint, 64); \
|
||||||
ENDIAN_TEST(endian, qint, 32); \
|
ENDIAN_TEST(endian, qint, 32); \
|
||||||
ENDIAN_TEST(endian, qint, 16); \
|
ENDIAN_TEST(endian, qint, 16); \
|
||||||
@ -117,6 +144,8 @@ static const RawTestData inLittleEndian = {
|
|||||||
|
|
||||||
#define ENDIAN_TEST(endian, type, size) \
|
#define ENDIAN_TEST(endian, type, size) \
|
||||||
do { \
|
do { \
|
||||||
|
static_assert(std::is_same_v<decltype(qbswap(std::declval<type ## size>())), \
|
||||||
|
type ## size>); \
|
||||||
QCOMPARE(qFrom ## endian ## Endian( \
|
QCOMPARE(qFrom ## endian ## Endian( \
|
||||||
(type ## size)(in ## endian ## Endian.data.data ## size)), \
|
(type ## size)(in ## endian ## Endian.data.data ## size)), \
|
||||||
(type ## size)(inNativeEndian.data ## size)); \
|
(type ## size)(inNativeEndian.data ## size)); \
|
||||||
|
Loading…
x
Reference in New Issue
Block a user