From 05f4e1881ba05df7aab9553812afdb1a07ec9887 Mon Sep 17 00:00:00 2001 From: Mat Sutcliffe Date: Sat, 19 Feb 2022 19:35:23 +0000 Subject: [PATCH] DEBUG --- src/blackcore/fsd/fsdclient.cpp | 1 + src/blackcore/fsd/visualpilotdataupdate.cpp | 8 ++++++++ src/blackcore/fsd/visualpilotdataupdate.h | 3 +++ src/blackmisc/aviation/aircraftsituation.cpp | 7 +++++++ src/blackmisc/aviation/aircraftvelocity.cpp | 6 ++++++ src/blackmisc/aviation/aircraftvelocity.h | 3 +++ src/blackmisc/geo/coordinategeodetic.cpp | 3 +++ src/blackmisc/simulation/interpolantvelocity.cpp | 4 ++++ src/blackmisc/simulation/interpolatorlinear.cpp | 5 ++++- src/blackmisc/simulation/interpolatorspline.cpp | 8 +------- src/blackmisc/simulation/remoteaircraftprovider.cpp | 7 ------- src/blackmisc/timestampobjectlist.h | 4 ---- 12 files changed, 40 insertions(+), 19 deletions(-) diff --git a/src/blackcore/fsd/fsdclient.cpp b/src/blackcore/fsd/fsdclient.cpp index 5360c5bb9..e2975a626 100644 --- a/src/blackcore/fsd/fsdclient.cpp +++ b/src/blackcore/fsd/fsdclient.cpp @@ -1309,6 +1309,7 @@ namespace BlackCore::Fsd default: qFatal("Precondition violated"); break; } const CCallsign callsign(dataUpdate.sender(), CCallsign::Aircraft); + Q_ASSERT(dataUpdate.isValid()); CAircraftSituation situation( callsign, diff --git a/src/blackcore/fsd/visualpilotdataupdate.cpp b/src/blackcore/fsd/visualpilotdataupdate.cpp index 8e60a8e25..ade520197 100644 --- a/src/blackcore/fsd/visualpilotdataupdate.cpp +++ b/src/blackcore/fsd/visualpilotdataupdate.cpp @@ -94,4 +94,12 @@ namespace BlackCore::Fsd return VisualPilotDataStopped(m_sender, m_latitude, m_longitude, m_altitudeTrue, m_heightAgl, m_pitch, m_bank, m_heading, m_noseGearAngle); } + + bool VisualPilotDataUpdate::isValid() const + { + return std::isfinite(m_latitude) && std::isfinite(m_longitude) && std::isfinite(m_altitudeTrue) && std::isfinite(m_heightAgl) + && std::isfinite(m_pitch) && std::isfinite(m_bank) && std::isfinite(m_heading) + && std::isfinite(m_xVelocity) && std::isfinite(m_yVelocity) && std::isfinite(m_zVelocity) + && std::isfinite(m_pitchRadPerSec) && std::isfinite(m_bankRadPerSec) && std::isfinite(m_headingRadPerSec) && std::isfinite(m_noseGearAngle); + } } diff --git a/src/blackcore/fsd/visualpilotdataupdate.h b/src/blackcore/fsd/visualpilotdataupdate.h index 17a41a367..4d09a4e35 100644 --- a/src/blackcore/fsd/visualpilotdataupdate.h +++ b/src/blackcore/fsd/visualpilotdataupdate.h @@ -43,6 +43,9 @@ namespace BlackCore::Fsd //! Return a stopped update with the same values VisualPilotDataStopped toStopped() const; + //! True if this is a valid packet (no infinity or NaN) + bool isValid() const; + //! Properties //! @{ double m_latitude = 0.0; diff --git a/src/blackmisc/aviation/aircraftsituation.cpp b/src/blackmisc/aviation/aircraftsituation.cpp index b3e01265a..5bd3487cc 100644 --- a/src/blackmisc/aviation/aircraftsituation.cpp +++ b/src/blackmisc/aviation/aircraftsituation.cpp @@ -932,10 +932,12 @@ namespace BlackMisc::Aviation { auto copy = *this; const double time = CAircraftVelocity::c_timeUnit.convertFrom(ms, CTimeUnit::ms()); + Q_ASSERT(std::isfinite(copy.m_position.geodeticHeight().value())); copy.m_position.adjust( { m_velocity.getVelocityZ(CSpeedUnit::m_s()) * time, CLengthUnit::m() }, { m_velocity.getVelocityX(CSpeedUnit::m_s()) * time, CLengthUnit::m() }, { m_velocity.getVelocityY(CSpeedUnit::m_s()) * time, CLengthUnit::m() }); + Q_ASSERT(std::isfinite(copy.m_position.geodeticHeight().value())); copy.m_pitch.addValueSameUnit(time * m_velocity.getHeadingVelocity(m_pitch.getUnit(), CAircraftVelocity::c_timeUnit)); copy.m_bank.addValueSameUnit(time * m_velocity.getHeadingVelocity(m_bank.getUnit(), CAircraftVelocity::c_timeUnit)); copy.m_heading.addValueSameUnit(time * m_velocity.getHeadingVelocity(m_heading.getUnit(), CAircraftVelocity::c_timeUnit)); @@ -951,6 +953,11 @@ namespace BlackMisc::Aviation const double toAlt = to.m_position.geodeticHeight().value(CAircraftVelocity::c_xyzLengthUnit); const double fromAlt = from.m_position.geodeticHeight().value(CAircraftVelocity::c_xyzLengthUnit); o_ok = distance < CLength(100, CLengthUnit::m()) && std::abs(toAlt - fromAlt) < 100; + Q_ASSERT(std::isfinite(toAlt)); + Q_ASSERT(std::isfinite(fromAlt)); + Q_ASSERT(std::isfinite(toAlt - fromAlt)); + Q_ASSERT(std::isfinite((toAlt - fromAlt) / time)); + Q_ASSERT(std::abs(toAlt - fromAlt) < 10000); return { distance.value(CAircraftVelocity::c_xyzLengthUnit) * bearing.sin() / time, diff --git a/src/blackmisc/aviation/aircraftvelocity.cpp b/src/blackmisc/aviation/aircraftvelocity.cpp index dd597546c..741397d42 100644 --- a/src/blackmisc/aviation/aircraftvelocity.cpp +++ b/src/blackmisc/aviation/aircraftvelocity.cpp @@ -73,6 +73,12 @@ namespace BlackMisc::Aviation return c_timeUnit.convertFrom(angleUnit.convertFrom(m_heading, c_pbhAngleUnit), timeUnit); } + bool CAircraftVelocity::isValid() const + { + return std::isfinite(m_x) && std::isfinite(m_y) && std::isfinite(m_z) + && std::isfinite(m_pitch) && std::isfinite(m_roll) && std::isfinite(m_heading); + } + CAircraftVelocity& CAircraftVelocity::operator+=(const CAircraftVelocity& other) { m_x += other.m_x; diff --git a/src/blackmisc/aviation/aircraftvelocity.h b/src/blackmisc/aviation/aircraftvelocity.h index 66c40dbdc..e5588a7b7 100644 --- a/src/blackmisc/aviation/aircraftvelocity.h +++ b/src/blackmisc/aviation/aircraftvelocity.h @@ -61,6 +61,9 @@ namespace BlackMisc::Aviation double getHeadingVelocity(PhysicalQuantities::CAngleUnit angleUnit, PhysicalQuantities::CTimeUnit timeUnit) const; //! @} + //! False if any component is NaN or infinity + bool isValid() const; + //! Arithmetic operator //! @{ friend CAircraftVelocity operator +(CAircraftVelocity a, const CAircraftVelocity &b) { return a += b; } diff --git a/src/blackmisc/geo/coordinategeodetic.cpp b/src/blackmisc/geo/coordinategeodetic.cpp index a33148750..0e9d42874 100644 --- a/src/blackmisc/geo/coordinategeodetic.cpp +++ b/src/blackmisc/geo/coordinategeodetic.cpp @@ -401,7 +401,10 @@ namespace BlackMisc::Geo { setLatitude({ latitude().value(CAngleUnit::rad()) + dLat.value(CLengthUnit::m()) / c_earthRadiusMeters, CAngleUnit::rad() }); setLongitude({ longitude().value(CAngleUnit::rad()) + dLon.value(CLengthUnit::m()) / c_earthRadiusMeters / latitude().cos(), CAngleUnit::rad() }); + Q_ASSERT(std::isfinite(dAlt.value())); + Q_ASSERT(std::isfinite(geodeticHeight().value())); setGeodeticHeight(geodeticHeight().withOffset(dAlt)); + Q_ASSERT(std::isfinite(geodeticHeight().value())); } void CCoordinateGeodetic::setNormalVector(const std::array &normalVector) diff --git a/src/blackmisc/simulation/interpolantvelocity.cpp b/src/blackmisc/simulation/interpolantvelocity.cpp index 28885e860..2a19657a7 100644 --- a/src/blackmisc/simulation/interpolantvelocity.cpp +++ b/src/blackmisc/simulation/interpolantvelocity.cpp @@ -30,6 +30,10 @@ namespace BlackMisc::Simulation { m_situation = extrapolated; m_situation.setVelocity(situation.getVelocity() + error); + + Q_ASSERT(situation.getVelocity().isValid()); + Q_ASSERT(error.isValid()); + Q_ASSERT(m_situation.getVelocity().isValid()); } else { diff --git a/src/blackmisc/simulation/interpolatorlinear.cpp b/src/blackmisc/simulation/interpolatorlinear.cpp index f744c4efb..978a78d57 100644 --- a/src/blackmisc/simulation/interpolatorlinear.cpp +++ b/src/blackmisc/simulation/interpolatorlinear.cpp @@ -122,7 +122,10 @@ namespace BlackMisc::Simulation CAircraftSituation oldSituation = m_interpolant.getOldSituation(); CAircraftSituation newSituation = m_interpolant.getNewSituation(); - Q_ASSERT_X(newSituation.getAdjustedMSecsSinceEpoch() >= oldSituation.getAdjustedMSecsSinceEpoch(), Q_FUNC_INFO, "Wrong order"); + if (newSituation.getAdjustedMSecsSinceEpoch() <= oldSituation.getAdjustedMSecsSinceEpoch()) + { + Q_ASSERT_X(newSituation.getAdjustedMSecsSinceEpoch() >= oldSituation.getAdjustedMSecsSinceEpoch(), Q_FUNC_INFO, "Wrong order"); + } const bool updated = m_situationsLastModifiedUsed < m_situationsLastModified; const bool newSplit = newSituation.getAdjustedMSecsSinceEpoch() < m_currentTimeMsSinceEpoch; diff --git a/src/blackmisc/simulation/interpolatorspline.cpp b/src/blackmisc/simulation/interpolatorspline.cpp index d6c8bec39..25d23e47d 100644 --- a/src/blackmisc/simulation/interpolatorspline.cpp +++ b/src/blackmisc/simulation/interpolatorspline.cpp @@ -252,12 +252,6 @@ namespace BlackMisc::Simulation const double dt2 = static_cast(m_nextSampleAdjustedTime - m_prevSampleAdjustedTime); double timeFraction = dt1 / dt2; - if (CBuildConfig::isLocalDeveloperDebugBuild()) - { - BLACK_VERIFY_X(dt1 >= 0, Q_FUNC_INFO, "Expect postive dt1"); - BLACK_VERIFY_X(dt2 > 0, Q_FUNC_INFO, "Expect postive dt2"); - BLACK_VERIFY_X(isAcceptableTimeFraction(timeFraction), Q_FUNC_INFO, "Expect fraction 0-1"); - } timeFraction = clampValidTimeFraction(timeFraction); const qint64 interpolatedTime = m_prevSampleTime + qRound64(timeFraction * dt2); @@ -362,7 +356,7 @@ namespace BlackMisc::Simulation valid = CAircraftSituation::isValidVector(normalVector); if (!valid && CBuildConfig::isLocalDeveloperDebugBuild()) { - BLACK_VERIFY_X(valid, Q_FUNC_INFO, "invalid vector"); + //BLACK_VERIFY_X(valid, Q_FUNC_INFO, "invalid vector"); CLogMessage(this).warning(u"Invalid vector for '%1' v: %2 %3 %4") << currentSituation.getCallsign().asString() << normalVector[0] << normalVector[1] << normalVector[2]; } diff --git a/src/blackmisc/simulation/remoteaircraftprovider.cpp b/src/blackmisc/simulation/remoteaircraftprovider.cpp index 9d97b65ee..59dcfd38b 100644 --- a/src/blackmisc/simulation/remoteaircraftprovider.cpp +++ b/src/blackmisc/simulation/remoteaircraftprovider.cpp @@ -258,13 +258,6 @@ namespace BlackMisc::Simulation const CCallsign cs = situation.getCallsign(); if (cs.isEmpty()) { return situation; } - // testing - if (CBuildConfig::isLocalDeveloperDebugBuild()) - { - BLACK_VERIFY_X(situation.getTimeOffsetMs() > 0, Q_FUNC_INFO, "Missing offset"); - BLACK_VERIFY_X(situation.isValidVectorRange(), Q_FUNC_INFO, "Invalid vector"); - } - // add altitude offset (for testing only) CAircraftSituation situationCorrected(allowTestAltitudeOffset ? this->addTestAltitudeOffsetToSituation(situation) : situation); diff --git a/src/blackmisc/timestampobjectlist.h b/src/blackmisc/timestampobjectlist.h index dacf049cb..216e524a4 100644 --- a/src/blackmisc/timestampobjectlist.h +++ b/src/blackmisc/timestampobjectlist.h @@ -592,10 +592,6 @@ namespace BlackMisc this->container().clear(); const qint64 osTime = value.getTimeOffsetMs(); const qint64 os = -1 * qAbs(deltaTimeMs < 0 ? osTime : deltaTimeMs); - if (BlackConfig::CBuildConfig::isLocalDeveloperDebugBuild()) - { - BLACK_VERIFY_X(os < 0, Q_FUNC_INFO, "Need negative offset time to prefill time"); - } this->container().push_front(value); for (int i = 1; i < elements; i++) {