diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2023-01-24 16:16:32 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2023-01-26 15:12:58 +0100 |
commit | 8db3c1142248e4564e8b90db61ad1bdf13164453 (patch) | |
tree | 0074a96dd797518d2f952c9f92ba5d30bfcbb5ff | |
parent | 887beaae54715d0ffe0601a62f6e42bebc2bb45b (diff) |
Do not provide {in}equality opeartors for CAN parser value classes
These operators are only needed for tests.
Provide helper headers with proper implementations to avoid code
duplication, because each pair of operators is used in more than one
test.
Noticed during Qt 6.5 API review.
Pick-to: 6.5
Change-Id: Icf36ad7a7fb3e9230154933593470a6c84c16901
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
17 files changed, 147 insertions, 133 deletions
diff --git a/src/serialbus/qcanmessagedescription.cpp b/src/serialbus/qcanmessagedescription.cpp index d1b0f7c..bbb5d85 100644 --- a/src/serialbus/qcanmessagedescription.cpp +++ b/src/serialbus/qcanmessagedescription.cpp @@ -100,20 +100,6 @@ QCanMessageDescription &QCanMessageDescription::operator=(const QCanMessageDescr */ /*! - \fn bool QCanMessageDescription::operator==(const QCanMessageDescription &lhs, const QCanMessageDescription &rhs) - - Returns \c true if all of the \a lhs object's values are the same as those - of \a rhs. Otherwise returns \c false. -*/ - -/*! - \fn bool QCanMessageDescription::operator!=(const QCanMessageDescription &lhs, const QCanMessageDescription &rhs) - - Returns \c true if any of the \a lhs object's values are not the same as - those of \a rhs. Otherwise returns \c false. -*/ - -/*! Returns \c true when the message description is valid and \c false otherwise. @@ -334,16 +320,6 @@ void QCanMessageDescription::setSignalDescriptions(const QList<QCanSignalDescrip d->messageSignals.insert(desc.name(), desc); } -bool QCanMessageDescription::equals(const QCanMessageDescription &lhs, const QCanMessageDescription &rhs) -{ - return lhs.d->name == rhs.d->name - && lhs.d->transmitter == rhs.d->transmitter - && lhs.d->comment == rhs.d->comment - && lhs.d->id == rhs.d->id - && lhs.d->size == rhs.d->size - && lhs.d->messageSignals == rhs.d->messageSignals; -} - #ifndef QT_NO_DEBUG_STREAM QDebug QCanMessageDescription::debugStreaming(QDebug dbg, const QCanMessageDescription &msg) { diff --git a/src/serialbus/qcanmessagedescription.h b/src/serialbus/qcanmessagedescription.h index 36b8993..bb9140d 100644 --- a/src/serialbus/qcanmessagedescription.h +++ b/src/serialbus/qcanmessagedescription.h @@ -28,15 +28,6 @@ public: QCanMessageDescription &operator=(const QCanMessageDescription &other); QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCanMessageDescription) - friend bool operator==(const QCanMessageDescription &lhs, const QCanMessageDescription &rhs) - { - return equals(lhs, rhs); - } - friend bool operator!=(const QCanMessageDescription &lhs, const QCanMessageDescription &rhs) - { - return !equals(lhs, rhs); - } - void swap(QCanMessageDescription &other) noexcept { d.swap(other.d); } bool isValid() const; @@ -66,8 +57,6 @@ private: QExplicitlySharedDataPointer<QCanMessageDescriptionPrivate> d; friend class QCanMessageDescriptionPrivate; - static bool equals(const QCanMessageDescription &lhs, const QCanMessageDescription &rhs); - friend void qHash(const QCanMessageDescription &desc, size_t seed) noexcept = delete; #ifndef QT_NO_DEBUG_STREAM diff --git a/src/serialbus/qcansignaldescription.cpp b/src/serialbus/qcansignaldescription.cpp index 113e736..0df6a4a 100644 --- a/src/serialbus/qcansignaldescription.cpp +++ b/src/serialbus/qcansignaldescription.cpp @@ -247,20 +247,6 @@ QCanSignalDescription &QCanSignalDescription::operator=(const QCanSignalDescript */ /*! - \fn bool QCanSignalDescription::operator==(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs) - - Returns \c true if all of the \a lhs object's values are the same as those - of \a rhs. Otherwise returns \c false. -*/ - -/*! - \fn bool QCanSignalDescription::operator!=(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs) - - Returns \c true if any of the \a lhs object's values are not the same as - those of \a rhs. Otherwise returns \c false. -*/ - -/*! Returns \c true when the signal description is valid and \c false otherwise. A valid signal description \e must fulfill the following conditions: @@ -776,46 +762,6 @@ void QCanSignalDescription::addMultiplexSignal(const QString &name, const QVaria d->muxSignals.insert(name, { {value, value} }); } -// copied from qtbase/src/testlib/qtestcase.cpp -template <typename T> -static bool floatingCompare(const T &actual, const T &expected) -{ - switch (qFpClassify(expected)) - { - case FP_INFINITE: - return (expected < 0) == (actual < 0) && qFpClassify(actual) == FP_INFINITE; - case FP_NAN: - return qFpClassify(actual) == FP_NAN; - default: - if (!qFuzzyIsNull(expected)) - return qFuzzyCompare(actual, expected); - Q_FALLTHROUGH(); - case FP_SUBNORMAL: // subnormal is always fuzzily null - case FP_ZERO: - return qFuzzyIsNull(actual); - } -} - -bool QCanSignalDescription::equals(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs) -{ - return lhs.d->name == rhs.d->name - && lhs.d->unit == rhs.d->unit - && lhs.d->receiver == rhs.d->receiver - && lhs.d->comment == rhs.d->comment - && lhs.d->source == rhs.d->source - && lhs.d->endian == rhs.d->endian - && lhs.d->format == rhs.d->format - && lhs.d->startBit == rhs.d->startBit - && lhs.d->dataLength == rhs.d->dataLength - && lhs.d->muxState == rhs.d->muxState - && lhs.d->muxSignals == rhs.d->muxSignals - && floatingCompare(lhs.d->factor, rhs.d->factor) - && floatingCompare(lhs.d->offset, rhs.d->offset) - && floatingCompare(lhs.d->scaling, rhs.d->scaling) - && floatingCompare(lhs.d->minimum, rhs.d->minimum) - && floatingCompare(lhs.d->maximum, rhs.d->maximum); -} - #ifndef QT_NO_DEBUG_STREAM QDebug QCanSignalDescription::debugStreaming(QDebug dbg, const QCanSignalDescription &sig) { diff --git a/src/serialbus/qcansignaldescription.h b/src/serialbus/qcansignaldescription.h index f31364c..158f254 100644 --- a/src/serialbus/qcansignaldescription.h +++ b/src/serialbus/qcansignaldescription.h @@ -54,15 +54,6 @@ public: QCanSignalDescription &operator=(const QCanSignalDescription &other); QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCanSignalDescription) - friend bool operator==(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs) - { - return equals(lhs, rhs); - } - friend bool operator!=(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs) - { - return !equals(lhs, rhs); - } - void swap(QCanSignalDescription &other) noexcept { d.swap(other.d); } bool isValid() const; @@ -120,8 +111,6 @@ private: QExplicitlySharedDataPointer<QCanSignalDescriptionPrivate> d; friend class QCanSignalDescriptionPrivate; - static bool equals(const QCanSignalDescription &lhs, const QCanSignalDescription &rhs); - friend void qHash(const QCanSignalDescription &desc, size_t seed) noexcept = delete; #ifndef QT_NO_DEBUG_STREAM diff --git a/src/serialbus/qcanuniqueiddescription.cpp b/src/serialbus/qcanuniqueiddescription.cpp index 3096b05..3ec45b4 100644 --- a/src/serialbus/qcanuniqueiddescription.cpp +++ b/src/serialbus/qcanuniqueiddescription.cpp @@ -99,20 +99,6 @@ QCanUniqueIdDescription &QCanUniqueIdDescription::operator=(const QCanUniqueIdDe */ /*! - \fn bool QCanUniqueIdDescription::operator==(const QCanUniqueIdDescription &lhs, const QCanUniqueIdDescription &rhs) - - Returns \c true if all of the \a lhs object's values are the same as those - of \a rhs. Otherwise returns \c false. -*/ - -/*! - \fn bool QCanUniqueIdDescription::operator!=(const QCanUniqueIdDescription &lhs, const QCanUniqueIdDescription &rhs) - - Returns \c true if any of the \a lhs object's values are not the same as - those of \a rhs. Otherwise returns \c false. -*/ - -/*! Returns \c true when this unique identifier description is valid and \c false otherwise. @@ -216,14 +202,6 @@ void QCanUniqueIdDescription::setEndian(QSysInfo::Endian endian) d->endian = endian; } -bool QCanUniqueIdDescription::equals(const QCanUniqueIdDescription &lhs, const QCanUniqueIdDescription &rhs) -{ - return lhs.d->source == rhs.d->source - && lhs.d->endian == rhs.d->endian - && lhs.d->startBit == rhs.d->startBit - && lhs.d->bitLength == rhs.d->bitLength; -} - QCanUniqueIdDescriptionPrivate *QCanUniqueIdDescriptionPrivate::get(const QCanUniqueIdDescription &desc) { return desc.d.data(); diff --git a/src/serialbus/qcanuniqueiddescription.h b/src/serialbus/qcanuniqueiddescription.h index 7b2fa44..213d9ff 100644 --- a/src/serialbus/qcanuniqueiddescription.h +++ b/src/serialbus/qcanuniqueiddescription.h @@ -25,15 +25,6 @@ public: QCanUniqueIdDescription &operator=(const QCanUniqueIdDescription &other); QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCanUniqueIdDescription) - friend bool operator==(const QCanUniqueIdDescription &lhs, const QCanUniqueIdDescription &rhs) - { - return equals(lhs, rhs); - } - friend bool operator!=(const QCanUniqueIdDescription &lhs, const QCanUniqueIdDescription &rhs) - { - return !equals(lhs, rhs); - } - void swap(QCanUniqueIdDescription &other) noexcept { d.swap(other.d); } bool isValid() const; @@ -54,8 +45,6 @@ private: QExplicitlySharedDataPointer<QCanUniqueIdDescriptionPrivate> d; friend class QCanUniqueIdDescriptionPrivate; - static bool equals(const QCanUniqueIdDescription &lhs, const QCanUniqueIdDescription &rhs); - friend void qHash(const QCanUniqueIdDescription &desc, size_t seed) noexcept = delete; }; diff --git a/tests/auto/qcandbcfileparser/CMakeLists.txt b/tests/auto/qcandbcfileparser/CMakeLists.txt index b128938..58a45e7 100644 --- a/tests/auto/qcandbcfileparser/CMakeLists.txt +++ b/tests/auto/qcandbcfileparser/CMakeLists.txt @@ -6,9 +6,13 @@ file(GLOB_RECURSE test_data_glob data/*) list(APPEND test_data ${test_data_glob}) +get_filename_component(SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../shared ABSOLUTE) + qt_internal_add_test(tst_qcandbcfileparser SOURCES tst_qcandbcfileparser.cpp + INCLUDE_DIRECTORIES + ${SHARED_DIR} LIBRARIES Qt::Network Qt::SerialBus diff --git a/tests/auto/qcandbcfileparser/tst_qcandbcfileparser.cpp b/tests/auto/qcandbcfileparser/tst_qcandbcfileparser.cpp index f7e0828..f3ad36c 100644 --- a/tests/auto/qcandbcfileparser/tst_qcandbcfileparser.cpp +++ b/tests/auto/qcandbcfileparser/tst_qcandbcfileparser.cpp @@ -8,6 +8,9 @@ #include <QtSerialBus/QCanSignalDescription> #include <QtSerialBus/QCanUniqueIdDescription> +#include "qcanmessagedescription_helpers.h" +#include "qcanuniqueiddescription_helpers.h" + QT_USE_NAMESPACE using namespace Qt::StringLiterals; diff --git a/tests/auto/qcanmessagedescription/CMakeLists.txt b/tests/auto/qcanmessagedescription/CMakeLists.txt index 6195312..ce93f50 100644 --- a/tests/auto/qcanmessagedescription/CMakeLists.txt +++ b/tests/auto/qcanmessagedescription/CMakeLists.txt @@ -1,9 +1,13 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause +get_filename_component(SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../shared ABSOLUTE) + qt_internal_add_test(tst_qcanmessagedescription SOURCES tst_qcanmessagedescription.cpp + INCLUDE_DIRECTORIES + ${SHARED_DIR} LIBRARIES Qt::Network Qt::SerialBus diff --git a/tests/auto/qcanmessagedescription/tst_qcanmessagedescription.cpp b/tests/auto/qcanmessagedescription/tst_qcanmessagedescription.cpp index d4f5c47..76707ee 100644 --- a/tests/auto/qcanmessagedescription/tst_qcanmessagedescription.cpp +++ b/tests/auto/qcanmessagedescription/tst_qcanmessagedescription.cpp @@ -7,6 +7,8 @@ #include <QtSerialBus/qcansignaldescription.h> #include <QtSerialBus/private/qcanmessagedescription_p.h> +#include "qcanmessagedescription_helpers.h" + QT_USE_NAMESPACE class tst_QCanMessageDescription : public QObject diff --git a/tests/auto/qcansignaldescription/CMakeLists.txt b/tests/auto/qcansignaldescription/CMakeLists.txt index 9a3999d..37ed049 100644 --- a/tests/auto/qcansignaldescription/CMakeLists.txt +++ b/tests/auto/qcansignaldescription/CMakeLists.txt @@ -1,9 +1,13 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause +get_filename_component(SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../shared ABSOLUTE) + qt_internal_add_test(tst_qcansignaldescription SOURCES tst_qcansignaldescription.cpp + INCLUDE_DIRECTORIES + ${SHARED_DIR} LIBRARIES Qt::Network Qt::SerialBus diff --git a/tests/auto/qcansignaldescription/tst_qcansignaldescription.cpp b/tests/auto/qcansignaldescription/tst_qcansignaldescription.cpp index 2a4ef79..cffd7a0 100644 --- a/tests/auto/qcansignaldescription/tst_qcansignaldescription.cpp +++ b/tests/auto/qcansignaldescription/tst_qcansignaldescription.cpp @@ -6,6 +6,8 @@ #include <QtSerialBus/qcansignaldescription.h> #include <QtSerialBus/private/qcansignaldescription_p.h> +#include "qcansignaldescription_helpers.h" + QT_USE_NAMESPACE class tst_QCanSignalDescription : public QObject diff --git a/tests/auto/qcanuniqueiddescription/CMakeLists.txt b/tests/auto/qcanuniqueiddescription/CMakeLists.txt index 0afb458..9f94365 100644 --- a/tests/auto/qcanuniqueiddescription/CMakeLists.txt +++ b/tests/auto/qcanuniqueiddescription/CMakeLists.txt @@ -1,9 +1,13 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause +get_filename_component(SHARED_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../shared ABSOLUTE) + qt_internal_add_test(tst_qcanuniqueiddescription SOURCES tst_qcanuniqueiddescription.cpp + INCLUDE_DIRECTORIES + ${SHARED_DIR} LIBRARIES Qt::Network Qt::SerialBus diff --git a/tests/auto/qcanuniqueiddescription/tst_qcanuniqueiddescription.cpp b/tests/auto/qcanuniqueiddescription/tst_qcanuniqueiddescription.cpp index 04e78fd..7c24742 100644 --- a/tests/auto/qcanuniqueiddescription/tst_qcanuniqueiddescription.cpp +++ b/tests/auto/qcanuniqueiddescription/tst_qcanuniqueiddescription.cpp @@ -6,6 +6,8 @@ #include <QtSerialBus/qcanuniqueiddescription.h> #include <QtSerialBus/private/qcanuniqueiddescription_p.h> +#include "qcanuniqueiddescription_helpers.h" + QT_USE_NAMESPACE class tst_QCanUniqueIdDescription : public QObject diff --git a/tests/auto/shared/qcanmessagedescription_helpers.h b/tests/auto/shared/qcanmessagedescription_helpers.h new file mode 100644 index 0000000..4c69a63 --- /dev/null +++ b/tests/auto/shared/qcanmessagedescription_helpers.h @@ -0,0 +1,32 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QCANMESSAGEDESCRIPTION_HELPERS_H +#define QCANMESSAGEDESCRIPTION_HELPERS_H + +#include <QtSerialBus/qcanmessagedescription.h> + +#include "qcansignaldescription_helpers.h" + +QT_BEGIN_NAMESPACE + +inline bool operator==(const QCanMessageDescription &lhs, + const QCanMessageDescription &rhs) noexcept +{ + return lhs.uniqueId() == rhs.uniqueId() + && lhs.name() == rhs.name() + && lhs.size() == rhs.size() + && lhs.transmitter() == rhs.transmitter() + && lhs.comment() == rhs.comment() + && lhs.signalDescriptions() == rhs.signalDescriptions(); +} + +inline bool operator!=(const QCanMessageDescription &lhs, + const QCanMessageDescription &rhs) noexcept +{ + return !(lhs == rhs); +} + +QT_END_NAMESPACE + +#endif // QCANMESSAGEDESCRIPTION_HELPERS_H diff --git a/tests/auto/shared/qcansignaldescription_helpers.h b/tests/auto/shared/qcansignaldescription_helpers.h new file mode 100644 index 0000000..6383150 --- /dev/null +++ b/tests/auto/shared/qcansignaldescription_helpers.h @@ -0,0 +1,62 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QCANSIGNALDESCRIPTION_HELPERS_H +#define QCANSIGNALDESCRIPTION_HELPERS_H + +#include <QtCore/qnumeric.h> + +#include <QtSerialBus/qcansignaldescription.h> + +QT_BEGIN_NAMESPACE + +// copied from qtbase/src/testlib/qtestcase.cpp +template <typename T> +bool floatingCompare(const T &actual, const T &expected) +{ + switch (qFpClassify(expected)) + { + case FP_INFINITE: + return (expected < 0) == (actual < 0) && qFpClassify(actual) == FP_INFINITE; + case FP_NAN: + return qFpClassify(actual) == FP_NAN; + default: + if (!qFuzzyIsNull(expected)) + return qFuzzyCompare(actual, expected); + Q_FALLTHROUGH(); + case FP_SUBNORMAL: // subnormal is always fuzzily null + case FP_ZERO: + return qFuzzyIsNull(actual); + } +} + +inline bool operator==(const QCanSignalDescription &lhs, + const QCanSignalDescription &rhs) noexcept +{ + return lhs.name() == rhs.name() + && lhs.physicalUnit() == rhs.physicalUnit() + && lhs.receiver() == rhs.receiver() + && lhs.comment() == rhs.comment() + && lhs.dataSource() == rhs.dataSource() + && lhs.dataEndian() == rhs.dataEndian() + && lhs.dataFormat() == rhs.dataFormat() + && lhs.startBit() == rhs.startBit() + && lhs.bitLength() == rhs.bitLength() + && floatingCompare(lhs.factor(), rhs.factor()) + && floatingCompare(lhs.offset(), rhs.offset()) + && floatingCompare(lhs.scaling(), rhs.scaling()) + && floatingCompare(lhs.minimum(), rhs.minimum()) + && floatingCompare(lhs.maximum(), rhs.maximum()) + && lhs.multiplexState() == rhs.multiplexState() + && lhs.multiplexSignals() == rhs.multiplexSignals(); +} + +inline bool operator!=(const QCanSignalDescription &lhs, + const QCanSignalDescription &rhs) noexcept +{ + return !(lhs == rhs); +} + +QT_END_NAMESPACE + +#endif // QCANSIGNALDESCRIPTION_HELPERS_H diff --git a/tests/auto/shared/qcanuniqueiddescription_helpers.h b/tests/auto/shared/qcanuniqueiddescription_helpers.h new file mode 100644 index 0000000..a1932fe --- /dev/null +++ b/tests/auto/shared/qcanuniqueiddescription_helpers.h @@ -0,0 +1,28 @@ +// Copyright (C) 2023 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only + +#ifndef QCANUNIQUEIDDESCRIPTION_HELPERS_H +#define QCANUNIQUEIDDESCRIPTION_HELPERS_H + +#include <QtSerialBus/qcanuniqueiddescription.h> + +QT_BEGIN_NAMESPACE + +inline bool operator==(const QCanUniqueIdDescription &lhs, + const QCanUniqueIdDescription &rhs) noexcept +{ + return lhs.source() == rhs.source() + && lhs.startBit() == rhs.startBit() + && lhs.bitLength() == rhs.bitLength() + && lhs.endian() == rhs.endian(); +} + +inline bool operator!=(const QCanUniqueIdDescription &lhs, + const QCanUniqueIdDescription &rhs) noexcept +{ + return !(lhs == rhs); +} + +QT_END_NAMESPACE + +#endif // QCANUNIQUEIDDESCRIPTION_HELPERS_H |