tst_QtEndian: rewrite the ENDIAN_TEST macros to support FP

No functional change, yet. Just dissociating the data name from type
name, so we can add tests for FP types in a follow-up step.

Manual conflict resolutions:
 - no qint128 in Qt 6.5, yet
 - but keep the 6.6 parent's addition of the static assertion that
   the result of qbswap() be the same type as the input, because that
   can detect missing/faulty overloads.

Change-Id: I98fdebb49cca614ab27db146c4bacafd190e7d9b
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit f25804b3955d0b621ac8ff26470f950dbd1e3337)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
(cherry picked from commit 8f77dffb39d01e5f23164de7c9308c395a42b20f)
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
(cherry picked from commit b1aa12b3dee092f117453cbef8ab3cbf0c2a3f85)
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
Marc Mutz 2023-12-11 14:17:04 +01:00
parent 0738f6654b
commit 01431b8ebe

View File

@ -102,27 +102,31 @@ static const RawTestData inLittleEndian = {
#define EXPAND_ENDIAN_TEST(endian) \
do { \
/* Unsigned tests */ \
ENDIAN_TEST(endian, quint, 64); \
ENDIAN_TEST(endian, quint, 32); \
ENDIAN_TEST(endian, quint, 16); \
ENDIAN_TEST(endian, quint, 8); \
ENDIAN_TEST_INT(endian, ui, 64); \
ENDIAN_TEST_INT(endian, ui, 32); \
ENDIAN_TEST_INT(endian, ui, 16); \
ENDIAN_TEST_INT(endian, ui, 8); \
\
/* Signed tests */ \
ENDIAN_TEST(endian, qint, 64); \
ENDIAN_TEST(endian, qint, 32); \
ENDIAN_TEST(endian, qint, 16); \
ENDIAN_TEST(endian, qint, 8); \
ENDIAN_TEST_INT(endian, i, 64); \
ENDIAN_TEST_INT(endian, i, 32); \
ENDIAN_TEST_INT(endian, i, 16); \
ENDIAN_TEST_INT(endian, i, 8); \
} while (false) \
/**/
#define ENDIAN_TEST(endian, type, size) \
#define ENDIAN_TEST_INT(Endian, Uns, Size) \
ENDIAN_TEST(Endian, q ## Uns ## nt ## Size, data ## Size)
#define ENDIAN_TEST(endian, Type, Data) \
do { \
static_assert(std::is_same_v<decltype(qbswap(std::declval<Type>())), Type>); \
QCOMPARE(qFrom ## endian ## Endian( \
(type ## size)(in ## endian ## Endian.data.data ## size)), \
(type ## size)(inNativeEndian.data ## size)); \
QCOMPARE(qFrom ## endian ## Endian<type ## size>( \
in ## endian ## Endian.rawData + offsetof(TestData, data ## size)), \
(type ## size)(inNativeEndian.data ## size)); \
(Type)(in ## endian ## Endian.data.Data)), \
(Type)(inNativeEndian.Data)); \
QCOMPARE(qFrom ## endian ## Endian<Type>( \
in ## endian ## Endian.rawData + offsetof(TestData, Data)), \
(Type)(inNativeEndian.Data)); \
} while (false) \
/**/
@ -243,18 +247,18 @@ void tst_QtEndian::fromLittleEndianRegion()
}
}
#define ENDIAN_TEST(endian, type, size) \
do { \
QCOMPARE(qTo ## endian ## Endian( \
(type ## size)(inNativeEndian.data ## size)), \
(type ## size)(in ## endian ## Endian.data.data ## size)); \
\
RawTestData test; \
qTo ## endian ## Endian( \
(type ## size)(inNativeEndian.data ## size), \
test.rawData + offsetof(TestData, data ## size)); \
QCOMPARE(test.data.data ## size, in ## endian ## Endian.data.data ## size ); \
} while (false) \
#define ENDIAN_TEST(endian, Type, Data) \
do { \
QCOMPARE(qTo ## endian ## Endian( \
(Type)(inNativeEndian.Data)), \
(Type)(in ## endian ## Endian.data.Data)); \
\
RawTestData test; \
qTo ## endian ## Endian( \
(Type)(inNativeEndian.Data), \
test.rawData + offsetof(TestData, Data)); \
QCOMPARE(test.data.Data, in ## endian ## Endian.data.Data ); \
} while (false) \
/**/
void tst_QtEndian::toBigEndian()