tst_Selftests: rewrite this with templates instead of macro

Otherwise it's undebuggable.

Change-Id: I3c79b7e08fa346988dfefffd171ee81fefde63b0
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Thiago Macieira 2022-10-17 09:28:55 -07:00
parent e9a9257828
commit c66adaa1f1

View File

@ -161,107 +161,115 @@ void tst_ExtendedCompare::initTestCase_data()
QTest::newRow("GE") << QTest::ComparisonOperation::GreaterThanOrEqual; QTest::newRow("GE") << QTest::ComparisonOperation::GreaterThanOrEqual;
} }
#define GENERATE_DATA_FOR_TYPE(Type, val1, val2) \ template <typename T> static void generateData(T val1, T val2)
do { \ {
Q_ASSERT(val1 < val2); \ Q_ASSERT(val1 < val2);
QTest::addColumn<Type>("lhs"); \ QTest::addColumn<T>("lhs");
QTest::addColumn<Type>("rhs"); \ QTest::addColumn<T>("rhs");
QTest::newRow("left == right") << val1 << val1; \ QTest::newRow("left == right") << val1 << val1;
QTest::newRow("left < right") << val1 << val2; \ QTest::newRow("left < right") << val1 << val2;
QTest::newRow("left > right") << val2 << val1; \ QTest::newRow("left > right") << val2 << val1;
} while (false) }
#define EXECUTE_COMPARISON_FOR_TYPE(Type) \ template <typename T> static void executeComparison()
do { \ {
QFETCH_GLOBAL(QTest::ComparisonOperation, operation); \ QFETCH_GLOBAL(QTest::ComparisonOperation, operation);
QFETCH(Type, lhs); \ QFETCH(T, lhs);
QFETCH(Type, rhs); \ QFETCH(T, rhs);
COMPARE_WITH_TYPE(operation, lhs, rhs); \ switch (operation) {
} while (false) case QTest::ComparisonOperation::CustomCompare: QCOMPARE(lhs, rhs); break;
case QTest::ComparisonOperation::Equal: QCOMPARE_EQ(lhs, rhs); break;
case QTest::ComparisonOperation::NotEqual: QCOMPARE_NE(lhs, rhs); break;
case QTest::ComparisonOperation::LessThan: QCOMPARE_LT(lhs, rhs); break;
case QTest::ComparisonOperation::LessThanOrEqual: QCOMPARE_LE(lhs, rhs); break;
case QTest::ComparisonOperation::GreaterThan: QCOMPARE_GT(lhs, rhs); break;
case QTest::ComparisonOperation::GreaterThanOrEqual: QCOMPARE_GE(lhs, rhs); break;
}
}
void tst_ExtendedCompare::compareInts_data() void tst_ExtendedCompare::compareInts_data()
{ {
GENERATE_DATA_FOR_TYPE(int, 1, 2); generateData(1, 2);
} }
void tst_ExtendedCompare::compareInts() void tst_ExtendedCompare::compareInts()
{ {
EXECUTE_COMPARISON_FOR_TYPE(int); executeComparison<int>();
} }
void tst_ExtendedCompare::compareFloats_data() void tst_ExtendedCompare::compareFloats_data()
{ {
GENERATE_DATA_FOR_TYPE(float, 1.0f, 1.1f); generateData(1.0f, 1.1f);
} }
void tst_ExtendedCompare::compareFloats() void tst_ExtendedCompare::compareFloats()
{ {
EXECUTE_COMPARISON_FOR_TYPE(float); executeComparison<float>();
} }
void tst_ExtendedCompare::compareDoubles_data() void tst_ExtendedCompare::compareDoubles_data()
{ {
GENERATE_DATA_FOR_TYPE(double, 0.0, 0.1); generateData(0.0, 0.1);
} }
void tst_ExtendedCompare::compareDoubles() void tst_ExtendedCompare::compareDoubles()
{ {
EXECUTE_COMPARISON_FOR_TYPE(double); executeComparison<double>();
} }
void tst_ExtendedCompare::comparePointers_data() void tst_ExtendedCompare::comparePointers_data()
{ {
static constexpr int values[] = { 1, 2 }; static constexpr int values[] = { 1, 2 };
GENERATE_DATA_FOR_TYPE(const int *, &values[0], &values[1]); generateData(&values[0], &values[1]);
} }
void tst_ExtendedCompare::comparePointers() void tst_ExtendedCompare::comparePointers()
{ {
EXECUTE_COMPARISON_FOR_TYPE(const int *); executeComparison<const int *>();
} }
void tst_ExtendedCompare::compareToNullptr_data() void tst_ExtendedCompare::compareToNullptr_data()
{ {
static const int *ptr = nullptr; static const int *ptr = nullptr;
static const int value = 1; static const int value = 1;
GENERATE_DATA_FOR_TYPE(const int *, ptr, &value); generateData(ptr, &value);
} }
void tst_ExtendedCompare::compareToNullptr() void tst_ExtendedCompare::compareToNullptr()
{ {
EXECUTE_COMPARISON_FOR_TYPE(const int *); executeComparison<const int *>();
} }
void tst_ExtendedCompare::compareUnregistereEnum_data() void tst_ExtendedCompare::compareUnregistereEnum_data()
{ {
GENERATE_DATA_FOR_TYPE(MyUnregisteredEnum, MyUnregisteredEnumValue1, MyUnregisteredEnumValue2); generateData(MyUnregisteredEnumValue1, MyUnregisteredEnumValue2);
} }
void tst_ExtendedCompare::compareUnregistereEnum() void tst_ExtendedCompare::compareUnregistereEnum()
{ {
EXECUTE_COMPARISON_FOR_TYPE(MyUnregisteredEnum); executeComparison<MyUnregisteredEnum>();
} }
void tst_ExtendedCompare::compareRegistereEnum_data() void tst_ExtendedCompare::compareRegistereEnum_data()
{ {
GENERATE_DATA_FOR_TYPE(Qt::DayOfWeek, Qt::Monday, Qt::Sunday); generateData(Qt::Monday, Qt::Sunday);
} }
void tst_ExtendedCompare::compareRegistereEnum() void tst_ExtendedCompare::compareRegistereEnum()
{ {
EXECUTE_COMPARISON_FOR_TYPE(Qt::DayOfWeek); executeComparison<Qt::DayOfWeek>();
} }
void tst_ExtendedCompare::compareCustomTypes_data() void tst_ExtendedCompare::compareCustomTypes_data()
{ {
static const MyClass val1(1); static const MyClass val1(1);
static const MyClass val2(2); static const MyClass val2(2);
GENERATE_DATA_FOR_TYPE(MyClass, val1, val2); generateData(val1, val2);
} }
void tst_ExtendedCompare::compareCustomTypes() void tst_ExtendedCompare::compareCustomTypes()
{ {
EXECUTE_COMPARISON_FOR_TYPE(MyClass); executeComparison<MyClass>();
} }
void tst_ExtendedCompare::checkComparisonForTemporaryObjects() void tst_ExtendedCompare::checkComparisonForTemporaryObjects()