tst_qguimetatype: Avoid deprecated methods

This makes the 5.15 and 6.x branches more comparable, as in 6.0 the
preferred way is to use the non-static methods (which avoids an
expensive lookup in 6.x).
As a drive-by, Avoid memory leaks if the test fails.

Pick-to: 6.0 6.1 5.15
Change-Id: I95b133342a4ea19dd23c235a408f38089706412b
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Fabian Kosmale 2021-03-16 09:27:50 +01:00
parent f7c292a713
commit a7f24218e3

View File

@ -28,6 +28,7 @@
#include <qtest.h>
#include <QtCore/qmetatype.h>
#include <QScopeGuard>
class tst_QGuiMetaType : public QObject
{
@ -62,17 +63,20 @@ void tst_QGuiMetaType::constructInPlace_data()
void tst_QGuiMetaType::constructInPlace()
{
QFETCH(int, typeId);
int size = QMetaType::sizeOf(typeId);
QMetaType type(typeId);
int size = type.sizeOf();
void *storage = qMallocAligned(size, 2 * sizeof(qlonglong));
QCOMPARE(QMetaType::construct(typeId, storage, /*copy=*/0), storage);
QMetaType::destruct(typeId, storage);
auto cleanUp = qScopeGuard([&]() {
qFreeAligned(storage);
});
QCOMPARE(type.construct(storage, /*copy=*/0), storage);
type.destruct(storage);
QBENCHMARK {
for (int i = 0; i < 100000; ++i) {
QMetaType::construct(typeId, storage, /*copy=*/0);
QMetaType::destruct(typeId, storage);
type.construct(storage, /*copy=*/0);
type.destruct(storage);
}
}
qFreeAligned(storage);
}
void tst_QGuiMetaType::constructInPlaceCopy_data()
@ -83,19 +87,22 @@ void tst_QGuiMetaType::constructInPlaceCopy_data()
void tst_QGuiMetaType::constructInPlaceCopy()
{
QFETCH(int, typeId);
int size = QMetaType::sizeOf(typeId);
QMetaType type(typeId);
int size = type.sizeOf();
void *storage = qMallocAligned(size, 2 * sizeof(qlonglong));
void *other = QMetaType::create(typeId);
QCOMPARE(QMetaType::construct(typeId, storage, other), storage);
QMetaType::destruct(typeId, storage);
void *other = type.create();
auto cleanUp = qScopeGuard([&]() {
type.destroy(other);
qFreeAligned(storage);
});
QCOMPARE(type.construct(storage, other), storage);
type.destruct(storage);
QBENCHMARK {
for (int i = 0; i < 100000; ++i) {
QMetaType::construct(typeId, storage, other);
QMetaType::destruct(typeId, storage);
type.construct(storage, other);
type.destruct(storage);
}
}
QMetaType::destroy(typeId, other);
qFreeAligned(storage);
}
QTEST_MAIN(tst_QGuiMetaType)