diff options
Diffstat (limited to 'tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp')
-rw-r--r-- | tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp b/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp new file mode 100644 index 0000000000..1a88c49993 --- /dev/null +++ b/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp @@ -0,0 +1,55 @@ +// Copyright (C) 2021 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com> +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only + +#include <QMetaEnum> +#include <QTest> + +class tst_QMetaEnum: public QObject +{ + Q_OBJECT +public: + using QObject::QObject; + +private Q_SLOTS: + void valueToKeys_data(); + void valueToKeys(); + void keysToValue_data() { valueToKeys_data(); } + void keysToValue(); +}; + +void tst_QMetaEnum::valueToKeys_data() +{ + QTest::addColumn<int>("buttons"); + QTest::addColumn<QByteArray>("string"); + // Qt::MouseButtons has at least 24 enumerators, so it's a good performance test + const auto me = QMetaEnum::fromType<Qt::MouseButtons>(); + int accu = 0; + for (int i = 0; i < std::min(31, me.keyCount()); ++i) { + accu <<= 1; + accu |= 1; + QTest::addRow("%d bits set", i) << accu << me.valueToKeys(accu); + } +} + +void tst_QMetaEnum::valueToKeys() +{ + QFETCH(const int, buttons); + const auto me = QMetaEnum::fromType<Qt::MouseButtons>(); + QBENCHMARK { + [[maybe_unused]] auto r = me.valueToKeys(buttons); + } +} + +void tst_QMetaEnum::keysToValue() +{ + QFETCH(const QByteArray, string); + const auto me = QMetaEnum::fromType<Qt::MouseButtons>(); + bool ok; + QBENCHMARK { + [[maybe_unused]] auto r = me.keysToValue(string.data(), &ok); + } +} + +QTEST_MAIN(tst_QMetaEnum) + +#include "tst_bench_qmetaenum.moc" |