tst_QTypeRevision: rewrite using if constexpr and direct calls

This removes the specializations, which were hiding the fact that signed
8-bit integers produce assertion failures.

Pick-to: 6.7 6.5
Task-number: QTBUG-128848
Change-Id: Ibb4952b0eb50a8c51e05fffd9e88a137ca95bcd8
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
(cherry picked from commit a572b4b0780dcc5fcac55737fc4153fca93e6c62)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Thiago Macieira 2024-09-11 15:52:36 -07:00 committed by Qt Cherry-pick Bot
parent 23cf29ffdd
commit 43003ccbce

View File

@ -22,8 +22,17 @@ private slots:
};
template<typename Integer>
void compileTestRevisionMajorMinor()
void compileTestRevision()
{
if constexpr (std::numeric_limits<Integer>::max() >= 0xffff) {
const Integer value = 0x0510;
const QTypeRevision r = QTypeRevision::fromEncodedVersion(value);
QCOMPARE(r.majorVersion(), 5);
QCOMPARE(r.minorVersion(), 16);
QCOMPARE(r.toEncodedVersion<Integer>(), value);
}
const Integer major = 8;
const Integer minor = 4;
@ -40,43 +49,6 @@ void compileTestRevisionMajorMinor()
QCOMPARE(r4.minorVersion(), 4);
}
template<typename Integer>
void compileTestRevision()
{
if (std::is_signed<Integer>::value)
compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Signed>();
else
compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Unsigned>();
const Integer value = 0x0510;
const QTypeRevision r = QTypeRevision::fromEncodedVersion(value);
QCOMPARE(r.majorVersion(), 5);
QCOMPARE(r.minorVersion(), 16);
QCOMPARE(r.toEncodedVersion<Integer>(), value);
compileTestRevisionMajorMinor<Integer>();
}
template<>
void compileTestRevision<qint16>()
{
compileTestRevisionMajorMinor<quint8>();
}
template<>
void compileTestRevision<quint8>()
{
compileTestRevisionMajorMinor<quint8>();
}
template<>
void compileTestRevision<qint8>()
{
compileTestRevisionMajorMinor<qint8>();
}
void tst_QTypeRevision::qTypeRevision_data()
{
QTest::addColumn<QTypeRevision>("revision");
@ -122,8 +94,17 @@ void tst_QTypeRevision::qTypeRevision()
void tst_QTypeRevision::qTypeRevisionTypes()
{
compileTestRevision<quint8>();
// compileTestRevision<qint8>();
compileTestRevision<quint16>();
compileTestRevision<qint16>();
compileTestRevision<quint32>();
compileTestRevision<qint32>();
compileTestRevision<quint64>();
compileTestRevision<qint64>();
compileTestRevision<long>();
compileTestRevision<ulong>();
// compileTestRevision<char>();
QVERIFY(!QTypeRevision::isValidSegment(0xff));
QVERIFY(!QTypeRevision::isValidSegment(-1));