diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-07-29 16:34:44 +0200 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2020-07-31 09:46:54 +0200 |
commit | cb8072028753c32b11f6838cf8717f5414511975 (patch) | |
tree | 74f6f6999acdfc68856f780cf19bcce54a4d4a3c /tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp | |
parent | 61ccfefb25d61da95a1a1cdf0313da1448dc23c6 (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/qmetatype/tst_qmetatype.cpp')
-rw-r--r-- | tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp | 38 |
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 |