From 7590be1a54b756520040425cfa99676997c85954 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Mon, 7 May 2018 02:00:09 +0200 Subject: [PATCH] Ref T261, unit tests for the CG XPlane issue (feet? meters? mixup) Testing altitude correction --- tests/blackmisc/testaircraftsituation.cpp | 63 +++++++++++++++++++++++ tests/blackmisc/testaircraftsituation.h | 3 ++ 2 files changed, 66 insertions(+) diff --git a/tests/blackmisc/testaircraftsituation.cpp b/tests/blackmisc/testaircraftsituation.cpp index 49bc05989..a2c27dec4 100644 --- a/tests/blackmisc/testaircraftsituation.cpp +++ b/tests/blackmisc/testaircraftsituation.cpp @@ -121,6 +121,69 @@ namespace BlackMiscTest QVERIFY(!situations.isSortedAdjustedLatestFirst()); } + void CTestAircraftSituation::altitudeCorrection() + { + CAircraftSituation::AltitudeCorrection correction = CAircraftSituation::NoCorrection; + const CAircraftSituationList situations = testSituations(); + CAircraftSituation situation = situations.front(); + CAltitude alt(100, CAltitude::MeanSeaLevel, CLengthUnit::ft()); + + situation.setAltitude(alt); + CAltitude corAlt = situation.getCorrectedAltitude(true, &correction); + + // no elevation, expect same values + QVERIFY2(corAlt == alt, "Expect same altitude"); + + CElevationPlane ep(situation, CElevationPlane::singlePointRadius()); + situation.setGroundElevation(ep); + + // now we have same alt and elevation values + // no elevation, expect same values + corAlt = situation.getCorrectedAltitude(true, &correction); + QVERIFY2(corAlt == alt, "Still expect same altitude"); + + // now we use CG underflow detection + const CLength cg(3, CLengthUnit::m()); + situation.setCG(cg); + corAlt = situation.getCorrectedAltitude(true, &correction); + QVERIFY2(correction == CAircraftSituation::Underflow, "Expect underflow correction"); + QVERIFY2(corAlt > alt, "Expect corrected altitude"); + QVERIFY2((corAlt - cg) == alt, "Expect correction by CG"); + + // Unit of CG must be irrelevant + CLength cg2(cg); + cg2.switchUnit(CLengthUnit::m()); + situation.setCG(cg2); + CAltitude corAlt2 = situation.getCorrectedAltitude(true, &correction); + QVERIFY2(correction == CAircraftSituation::Underflow, "Expect underflow correction"); + QVERIFY2(corAlt2 == corAlt, "Expect same value for corrected altitude"); + + // now we test a negative altitude + alt = CAltitude(-1000, CAltitude::MeanSeaLevel, CLengthUnit::ft()); + ep.setGeodeticHeight(alt); + situation.setAltitude(alt); + situation.setGroundElevation(ep); + corAlt = situation.getCorrectedAltitude(true, &correction); + QVERIFY2(correction == CAircraftSituation::Underflow, "Expect underflow correction"); + QVERIFY2(corAlt > alt, "Expect corrected altitude"); + QVERIFY2((corAlt - cg) == alt, "Expect correction by CG"); + + // overflow detection + alt = CAltitude(1000, CAltitude::MeanSeaLevel, CLengthUnit::ft()); + situation.setAltitude(alt); + ep.setGeodeticHeight(alt); + ep.addAltitudeOffset(CLength(-100, CLengthUnit::ft())); + situation.setGroundElevation(ep); + corAlt = situation.getCorrectedAltitude(true, &correction); + QVERIFY2(corAlt == alt, "Expect same altitude, no overflow since not on gnd."); + + situation.setOnGround(CAircraftSituation::OnGround, CAircraftSituation::InFromNetwork); + corAlt = situation.getCorrectedAltitude(true, &correction); + QVERIFY2(correction == CAircraftSituation::DraggedToGround, "Expect dragged to gnd."); + QVERIFY2(corAlt < alt, "Expect corrected altitude dragged to gnd."); + QVERIFY2(corAlt == (ep.getAltitude() + cg), "Expect correction by CG"); + } + CAircraftSituationList CTestAircraftSituation::testSituations() { // "Kugaaruk Airport","Pelly Bay","Canada","YBB","CYBB",68.534401,-89.808098,56,-7,"A","America/Edmonton","airport","OurAirports" diff --git a/tests/blackmisc/testaircraftsituation.h b/tests/blackmisc/testaircraftsituation.h index f07aed191..12ee06b0c 100644 --- a/tests/blackmisc/testaircraftsituation.h +++ b/tests/blackmisc/testaircraftsituation.h @@ -52,6 +52,9 @@ namespace BlackMiscTest //! Test sort order void sortOrder() const; + //! Altitude correction + void altitudeCorrection(); + private: //! Test situations (ascending) static BlackMisc::Aviation::CAircraftSituationList testSituations();