Fixed buggy implementation of CPhysicalQuantity::lessThan.

This bug could cause a variant containing a list containing a null PQ
to compare equal to a variant containing a list containing a non-null PQ.
This commit is contained in:
Mat Sutcliffe
2019-03-29 00:17:18 +00:00
parent 38fe2d1c49
commit e5e6c53c82
3 changed files with 14 additions and 4 deletions

View File

@@ -222,7 +222,10 @@ namespace BlackMisc
bool CPhysicalQuantity<MU, PQ>::lessThan(const CPhysicalQuantity<MU, PQ> &other) const bool CPhysicalQuantity<MU, PQ>::lessThan(const CPhysicalQuantity<MU, PQ> &other) const
{ {
if (*this == other) return false; if (*this == other) return false;
if (this->isNull() || other.isNull()) return false;
if (isNull() < other.isNull()) { return true; }
if (isNull() > other.isNull()) { return false; }
if (isNull() && other.isNull()) { return false; }
return (m_value < other.value(m_unit)); return (m_value < other.value(m_unit));
} }

View File

@@ -96,6 +96,14 @@ namespace BlackMiscTest
CFrequencyUnit fu1 = CFrequencyUnit::Hz(); CFrequencyUnit fu1 = CFrequencyUnit::Hz();
QVERIFY2(fu1 != du1, "Hz must not be meter"); QVERIFY2(fu1 != du1, "Hz must not be meter");
// null comparisons
const CLength null(CLength::null());
const CLength nonNull(1, CLengthUnit::m());
QVERIFY2(null == CLength::null(), "null is equal to null");
QVERIFY2(!(null < CLength::null()), "null is equivalent to null");
QVERIFY2(null != nonNull, "null is not equal to non-null");
QVERIFY2((null < nonNull) != (null > nonNull), "null is ordered wrt non-null");
} }
void CTestPhysicalQuantities::lengthBasics() void CTestPhysicalQuantities::lengthBasics()

View File

@@ -85,9 +85,8 @@ namespace BlackMiscTest
CLength l4(-1, CLengthUnit::m()); CLength l4(-1, CLengthUnit::m());
QVERIFY2(l1 != l3, "Null length and non-null length should not be equal"); QVERIFY2(l1 != l3, "Null length and non-null length should not be equal");
QVERIFY2(l1 != l4, "Null length and non-null length should not be equal"); QVERIFY2(l1 != l4, "Null length and non-null length should not be equal");
QVERIFY2(!(l1 < l4), "Null length and non-null length should not be comparable"); QVERIFY2((l1 < l4) != (l1 > l4), "Null length and non-null length should be comparable");
QVERIFY2(!(l1 > l4), "Null length and non-null length should not be comparable"); QVERIFY2(compare(l1, l4) != 0, "Null length and non-null length should be sortable");
QVERIFY2(compare(l1, l4) < 0, "Null length and non-null length should be sortable");
CVariant station1qv = CVariant::fromValue(station1); CVariant station1qv = CVariant::fromValue(station1);
QVERIFY2(station1 == station1, "Station should be equal"); QVERIFY2(station1 == station1, "Station should be equal");