From 1f6b43c38f4554443979f5a2b852c35da93bcc0e Mon Sep 17 00:00:00 2001
From: James Turner <zakalawe@mac.com>
Date: Wed, 2 Sep 2020 21:34:07 +0100
Subject: [PATCH] More AI tests

---
 test_suite/unit_tests/AI/test_AIManager.cxx | 30 +++++++++++++++++++++
 test_suite/unit_tests/AI/test_AIManager.hxx |  2 ++
 2 files changed, 32 insertions(+)

diff --git a/test_suite/unit_tests/AI/test_AIManager.cxx b/test_suite/unit_tests/AI/test_AIManager.cxx
index d37891508..626e9f6b7 100644
--- a/test_suite/unit_tests/AI/test_AIManager.cxx
+++ b/test_suite/unit_tests/AI/test_AIManager.cxx
@@ -87,3 +87,33 @@ void AIManagerTests::testBasic()
     CPPUNIT_ASSERT_DOUBLES_EQUAL(fgGetDouble("orientation/heading-deg"), aiUserAircraft->getTrueHeadingDeg(), 1);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(fgGetDouble("velocities/groundspeed-kt"), aiUserAircraft->getSpeed(), 1);
 }
+
+void AIManagerTests::testAircraftWaypoints()
+{
+    auto aim = globals->get_subsystem<FGAIManager>();
+
+    SGPropertyNode_ptr aircraftDefinition(new SGPropertyNode);
+    aircraftDefinition->setStringValue("type", "aircraft");
+    aircraftDefinition->setStringValue("callsign", "G-ARTA");
+    // set class for performance data
+
+    auto eggd = FGAirport::findByIdent("EGGD");
+    aircraftDefinition->setDoubleValue("heading", 90.0);
+    aircraftDefinition->setDoubleValue("latitude", eggd->geod().getLatitudeDeg());
+    aircraftDefinition->setDoubleValue("longitude", eggd->geod().getLongitudeDeg());
+    aircraftDefinition->setDoubleValue("altitude", 6000.0);
+    aircraftDefinition->setDoubleValue("speed", 250.0); // IAS or TAS?
+
+    auto ai = aim->addObject(aircraftDefinition);
+    CPPUNIT_ASSERT(ai);
+    CPPUNIT_ASSERT_EQUAL(FGAIBase::otAircraft, ai->getType());
+    CPPUNIT_ASSERT_EQUAL(std::string{"aircraft"}, std::string{ai->getTypeString()});
+
+    auto aiAircraft = static_cast<FGAIAircraft*>(ai.get());
+
+    const auto aiPos = aiAircraft->getGeodPos();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(eggd->geod().getLatitudeDeg(), aiPos.getLatitudeDeg(), 0.01);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(eggd->geod().getLongitudeDeg(), aiPos.getLongitudeDeg(), 0.01);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(90.0, aiAircraft->getTrueHeadingDeg(), 1);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(250.0, aiAircraft->getSpeed(), 1);
+}
diff --git a/test_suite/unit_tests/AI/test_AIManager.hxx b/test_suite/unit_tests/AI/test_AIManager.hxx
index 17c5c8e3e..705f8a4c6 100644
--- a/test_suite/unit_tests/AI/test_AIManager.hxx
+++ b/test_suite/unit_tests/AI/test_AIManager.hxx
@@ -34,6 +34,7 @@ class AIManagerTests : public CppUnit::TestFixture
     // Set up the test suite.
     CPPUNIT_TEST_SUITE(AIManagerTests);
     CPPUNIT_TEST(testBasic);
+    CPPUNIT_TEST(testAircraftWaypoints);
     CPPUNIT_TEST_SUITE_END();
 
 
@@ -46,4 +47,5 @@ public:
 
     // The tests.
     void testBasic();
+    void testAircraftWaypoints();
 };