summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel
diff options
context:
space:
mode:
authorFabian Kosmale <fabian.kosmale@qt.io>2020-07-29 16:34:44 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-07-31 09:46:54 +0200
commitcb8072028753c32b11f6838cf8717f5414511975 (patch)
tree74f6f6999acdfc68856f780cf19bcce54a4d4a3c /tests/auto/corelib/kernel
parent61ccfefb25d61da95a1a1cdf0313da1448dc23c6 (diff)
Expose QMetaTypeInterface::alignof in QMetaType
We already have the information in the QMetaTypeInterface, and provide functions to access sizeof. Adding alignof support seems natural, and should make it easier to handle over-aligned types. This should also be helpful in QVariant. Change-Id: I166be76f4b7d2d2e524a3a1e513bd2f361e887c1 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
index f55d115f8f..f5eeb7d915 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
@@ -197,6 +197,8 @@ private slots:
void sizeOf();
void sizeOfStaticLess_data();
void sizeOfStaticLess();
+ void alignOf_data();
+ void alignOf();
void flags_data();
void flags();
void flagsStaticLess_data();
@@ -951,6 +953,42 @@ void tst_QMetaType::sizeOfStaticLess()
QCOMPARE(size_t(QMetaType(type).sizeOf()), size);
}
+template <typename T>
+auto getAlignOf()
+{
+ if constexpr (std::is_same_v<T, void>)
+ return 0;
+ else
+ return alignof(T);
+}
+
+void tst_QMetaType::alignOf_data()
+{
+ QTest::addColumn<int>("type");
+ QTest::addColumn<size_t>("size");
+
+ QTest::newRow("QMetaType::UnknownType") << int(QMetaType::UnknownType) << size_t(0);
+#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
+ QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << size_t(getAlignOf<RealType>());
+FOR_EACH_CORE_METATYPE(ADD_METATYPE_TEST_ROW)
+#undef ADD_METATYPE_TEST_ROW
+
+ QTest::newRow("Whity<double>") << ::qMetaTypeId<Whity<double> >() << alignof(Whity<double>);
+ QTest::newRow("Whity<int>") << ::qMetaTypeId<Whity<int> >() << alignof(Whity<int>);
+ QTest::newRow("Testspace::Foo") << ::qMetaTypeId<TestSpace::Foo>() << alignof(TestSpace::Foo);
+
+ QTest::newRow("-1") << -1 << size_t(0);
+ QTest::newRow("-124125534") << -124125534 << size_t(0);
+ QTest::newRow("124125534") << 124125534 << size_t(0);
+}
+
+void tst_QMetaType::alignOf()
+{
+ QFETCH(int, type);
+ QFETCH(size_t, size);
+ QCOMPARE(size_t(QMetaType(type).alignOf()), size);
+}
+
struct CustomMovable { CustomMovable() {} };
#if !defined(Q_CC_CLANG) && defined(Q_CC_GNU) && Q_CC_GNU < 501
QT_BEGIN_NAMESPACE