From 368dd1f46dc7e730280ac96e7ce0dcfc882eb3c7 Mon Sep 17 00:00:00 2001 From: Lars Toenning Date: Thu, 16 Jul 2020 18:37:13 +0200 Subject: [PATCH] [PQ] Add unary minus operator --- src/blackmisc/pq/physicalquantity.cpp | 8 ++++++++ src/blackmisc/pq/physicalquantity.h | 3 +++ .../pq/testphysicalquantities/testphysicalquantities.cpp | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/src/blackmisc/pq/physicalquantity.cpp b/src/blackmisc/pq/physicalquantity.cpp index 0b2356943..5e06dfef1 100644 --- a/src/blackmisc/pq/physicalquantity.cpp +++ b/src/blackmisc/pq/physicalquantity.cpp @@ -237,6 +237,14 @@ namespace BlackMisc return copy; } + template + PQ CPhysicalQuantity::operator -() const + { + PQ copy = *derived(); + copy *= -1; + return copy; + } + template bool CPhysicalQuantity::lessThan(const CPhysicalQuantity &other) const { diff --git a/src/blackmisc/pq/physicalquantity.h b/src/blackmisc/pq/physicalquantity.h index 6699b158f..ebcc04401 100644 --- a/src/blackmisc/pq/physicalquantity.h +++ b/src/blackmisc/pq/physicalquantity.h @@ -165,6 +165,9 @@ namespace BlackMisc //! Operator / PQ operator /(double divide) const; + //! Unary operator - + PQ operator -() const; + //! Equal operator == friend bool operator==(const CPhysicalQuantity &a, const CPhysicalQuantity &b) { return a.equals(b); } diff --git a/tests/blackmisc/pq/testphysicalquantities/testphysicalquantities.cpp b/tests/blackmisc/pq/testphysicalquantities/testphysicalquantities.cpp index ec76804b5..85d8a6e96 100644 --- a/tests/blackmisc/pq/testphysicalquantities/testphysicalquantities.cpp +++ b/tests/blackmisc/pq/testphysicalquantities/testphysicalquantities.cpp @@ -97,6 +97,12 @@ namespace BlackMiscTest CFrequencyUnit fu1 = CFrequencyUnit::Hz(); QVERIFY2(fu1 != du1, "Hz must not be meter"); + // Unary expressions + CTemperature temp1(5, CTemperatureUnit::C()); + QVERIFY2(-temp1 == CTemperature(-5, CTemperatureUnit::C()), "Temperatures must be the same"); + CTemperature temp2(-8.7, CTemperatureUnit::K()); + QVERIFY2(-temp2 == CTemperature(8.7, CTemperatureUnit::K()), "Temperatures must be the same"); + // null comparisons const CLength null(CLength::null()); const CLength nonNull(1, CLengthUnit::m());