1
0
Fork 0

Add failing test for SWIFT8 at YBCS

This commit is contained in:
Jonathan Redpath 2022-05-16 14:09:05 +01:00 committed by James Turner
parent 564884d27c
commit c3162c0233
2 changed files with 79 additions and 16 deletions

View file

@ -1463,7 +1463,7 @@ void GPSTests::testRadialIntercept()
FGTestApi::writeFlightPlanToKML(fp);
// position slightly before BUNAX
// position slightly before BUNAX
SGGeod initPos = fp->pointAlongRoute(2, -3.0);
// takes the place of the Nasal delegates
@ -1501,32 +1501,93 @@ void GPSTests::testRadialIntercept()
CPPUNIT_ASSERT_DOUBLES_EQUAL(185, gpsNode->getDoubleValue("wp/leg-true-course-deg"), 1.0);
FGTestApi::runForTime(30.0);
// repeat but with fly-by enabled
gpsNode->setBoolValue("config/enable-fly-by", true);
// repeat but with fly-by enabled
gpsNode->setBoolValue("config/enable-fly-by", true);
gpsNode->setStringValue("command", "obs");
FGTestApi::setPositionAndStabilise(initPos);
pilot->resetAtPosition(initPos);
fp->setCurrentIndex(2);
pilot->resetAtPosition(initPos);
fp->setCurrentIndex(2);
gpsNode->setStringValue("command", "leg");
CPPUNIT_ASSERT_EQUAL(string{"BUNAX"}, string{gpsNode->getStringValue("wp/wp[1]/ID")});
CPPUNIT_ASSERT_DOUBLES_EQUAL(312, gpsNode->getDoubleValue("wp/leg-true-course-deg"), 1.0);
CPPUNIT_ASSERT_EQUAL(string{"BUNAX"}, string{gpsNode->getStringValue("wp/wp[1]/ID")});
CPPUNIT_ASSERT_DOUBLES_EQUAL(312, gpsNode->getDoubleValue("wp/leg-true-course-deg"), 1.0);
pilot->setCourseTrue(fp->legAtIndex(2)->courseDeg());
pilot->flyGPSCourse(gps);
pilot->setCourseTrue(fp->legAtIndex(2)->courseDeg());
pilot->flyGPSCourse(gps);
ok = FGTestApi::runForTimeWithCheck(600.0, [fp]() {
return fp->currentIndex() == 4;
});
CPPUNIT_ASSERT(ok);
ok = FGTestApi::runForTimeWithCheck(600.0, [fp]() {
return fp->currentIndex() == 4;
});
CPPUNIT_ASSERT(ok);
// flying to BEBEV now
CPPUNIT_ASSERT_DOUBLES_EQUAL(185, gpsNode->getDoubleValue("wp/leg-true-course-deg"), 1.0);
FGTestApi::runForTime(30.0);
// flying to BEBEV now
CPPUNIT_ASSERT_DOUBLES_EQUAL(185, gpsNode->getDoubleValue("wp/leg-true-course-deg"), 1.0);
FGTestApi::runForTime(30.0);
}
void GPSTests::testSWIFT8()
{
FGTestApi::setUp::logPositionToKML("gps_swift8");
auto rm = globals->get_subsystem<FGRouteMgr>();
auto fp = FlightPlan::create();
rm->setFlightPlan(fp);
FGTestApi::setUp::populateFPWithoutNasal(fp, "YBCS", "15", "YBTL", "25", "SWIFT");
auto hdgToAlt_400 = new HeadingToAltitude(fp, "(400)", 150);
hdgToAlt_400->setAltitude(400, RESTRICT_AT);
fp->insertWayptAtIndex(hdgToAlt_400, 1);
SGGeod pos = SGGeod::fromDeg(145.743889,-16.850028);
auto intc = new RadialIntercept(fp, "(INTC)", pos, 30, 80);
fp->insertWayptAtIndex(intc, 2);
auto hdgToAlt_4000 = new HeadingToAltitude(fp, "(4000)", 80);
hdgToAlt_4000->setAltitude(4000, RESTRICT_AT);
fp->insertWayptAtIndex(hdgToAlt_4000, 3);
FGTestApi::writeFlightPlanToKML(fp);
// position slightly before INTC
SGGeod initPos = fp->pointAlongRoute(1, -1);
// takes the place of the Nasal delegates
auto testDelegate = new TestFPDelegate;
testDelegate->thePlan = fp;
CPPUNIT_ASSERT(rm->activate());
fp->addDelegate(testDelegate);
auto gps = setupStandardGPS();
FGTestApi::setPositionAndStabilise(initPos);
auto gpsNode = globals->get_props()->getNode("instrumentation/gps");
gpsNode->setBoolValue("config/delegate-sequencing", true);
gpsNode->setBoolValue("config/enable-fly-by", false);
gpsNode->setStringValue("command", "leg");
fp->setCurrentIndex(1);
auto pilot = SGSharedPtr<FGTestApi::TestPilot>(new FGTestApi::TestPilot);
pilot->resetAtPosition(initPos);
pilot->setCourseTrue(fp->legAtIndex(1)->courseDeg());
pilot->setSpeedKts(200);
pilot->setTargetAltitudeFtMSL(6000);
pilot->flyGPSCourse(gps);
bool ok = FGTestApi::runForTimeWithCheck(600.0, [fp]() {
return fp->currentIndex() == 4;
});
CPPUNIT_ASSERT(ok);
FGTestApi::runForTime(600.0);
// Flying to SWIFT
CPPUNIT_ASSERT_DOUBLES_EQUAL(149, gpsNode->getDoubleValue("wp/leg-true-course-deg"), 1.0);
FGTestApi::runForTime(30.0);
}
void GPSTests::testDMEIntercept()
{

View file

@ -53,6 +53,7 @@ class GPSTests : public CppUnit::TestFixture
CPPUNIT_TEST(testDirectToLegOnFlightplanAndResumeBuiltin);
CPPUNIT_TEST(testBuiltinRevertToOBSAtEnd);
CPPUNIT_TEST(testRadialIntercept);
CPPUNIT_TEST(testSWIFT8);
CPPUNIT_TEST(testDMEIntercept);
CPPUNIT_TEST(testFinalLegCourse);
CPPUNIT_TEST(testCourseLegIntermediateWaypoint);
@ -91,6 +92,7 @@ public:
void testDirectToLegOnFlightplanAndResumeBuiltin();
void testBuiltinRevertToOBSAtEnd();
void testRadialIntercept();
void testSWIFT8();
void testDMEIntercept();
void testFinalLegCourse();
void testCourseLegIntermediateWaypoint();