Esempio n. 1
0
        public void ReadTest()
        {
            var txt = @"
A,A1,3
S,P1,0,0,P2,0,1,0,90,60.11
S,P2,0,1,P3,0,2,270,90,60.11
";

            var w1 = new Waypoint("P1", 0.0, 0.0);
            var w2 = new Waypoint("P2", 0.0, 1.0);
            var w3 = new Waypoint("P3", 0.0, 2.0);

            var wptList = new WaypointList();

            wptList.AddWaypoint(w1);
            var err = AtsFileLoader.Read(wptList, txt.Lines());

            Assert.IsEmpty(err);
            Assert.IsTrue(wptList.AllWaypoints.SequenceEqual(w1, w2, w3));

            var n = new Neighbor("A1", 60.11);

            int i1 = wptList.FindByWaypoint(w1);
            int i2 = wptList.FindByWaypoint(w2);

            Assert.AreEqual(2, wptList.EdgeCount);
            Assert.IsTrue(wptList.GetEdge(wptList.EdgesFrom(i1).First()).Value.Equals(n));
            Assert.IsTrue(wptList.GetEdge(wptList.EdgesFrom(i2).First()).Value.Equals(n));
        }
Esempio n. 2
0
        private void AddToWptListCase3And5(WaypointList wptList)
        {
            var entry = new SidEntry(
                "18",
                "SID1",
                List(wpt101, wpt102, wpt103, wpt104),
                EntryType.RwySpecific,
                false);

            var adder =
                new SidAdder(
                    "AXYZ",
                    new SidCollection(
                        List(entry)),
                    wptList,
                    wptList.GetEditor(),
                    GetAirportManager());

            int rwyIndex = adder.AddSidsToWptList("18", List("SID1"));

            // Check the SID has been added with correct total distance.
            var edges = wptList.EdgesFrom(rwyIndex).ToList();

            Assert.IsTrue(edges.Count > 0);
            Assert.IsTrue(edges.Select(e => wptList.GetEdge(e))
                          .All(e =>
                               e.Value.InnerWaypoints.SequenceEqual(List(wpt101, wpt102, wpt103)) &&
                               e.Value.Type == InnerWaypointsType.Terminal));

            double dis = List(rwy, wpt101, wpt102, wpt103, wpt104).TotalDistance();

            Assert.IsTrue(SidIsAdded(
                              rwyIndex,
                              "SID1",
                              dis,
                              wptList));

            // Check the edges of last wpt
            int index = wptList.FindByWaypoint(wpt104);

            Assert.AreEqual(2, wptList.EdgesFromCount(index));

            foreach (var i in wptList.EdgesFrom(index))
            {
                var edge     = wptList.GetEdge(i);
                var neighbor = edge.Value;
                Assert.AreEqual("DCT", neighbor.Airway);
                Assert.AreEqual(0, neighbor.InnerWaypoints.Count);

                var expectedDis = wpt104.Distance(wptList[edge.ToNodeIndex]);

                Assert.AreEqual(
                    expectedDis,
                    neighbor.Distance,
                    DistanceEpsilon);
            }
        }
Esempio n. 3
0
 private bool StarIsAdded(int fromIndex, string name, double dis, WaypointList wptList)
 {
     return(wptList.EdgesFrom(fromIndex).Any(i =>
     {
         var edge = wptList.GetEdge(i);
         return edge.Value.Airway == name &&
         Math.Abs(dis - edge.Value.Distance) < DistanceEpsilon;
     }));
 }
Esempio n. 4
0
        private bool IsAirway(int lastIndex, string airway)
        {
            if (airway == "UPR")
            {
                return(true);
            }

            return(wptList.EdgesFrom(lastIndex).Any(
                       i => wptList.GetEdge(i).Value.Airway == airway));
        }
Esempio n. 5
0
 private static int GetEdgeIndex(string ID, string firstWpt, WaypointList wptList)
 {
     foreach (var i in wptList.EdgesFrom(wptList.FindById(firstWpt)))
     {
         if (wptList.GetEdge(i).Value.Airway == ID)
         {
             return(i);
         }
     }
     return(-1);
 }
Esempio n. 6
0
        private static void AssertDct(WaypointList wptList, string from, string to)
        {
            foreach (var i in wptList.EdgesFrom(wptList.FindById(from)))
            {
                if (wptList[wptList.GetEdge(i).ToNodeIndex].ID == to)
                {
                    return;
                }
            }

            Assert.Fail("{0} is not connected to {1}", from, to);
        }
Esempio n. 7
0
        private static bool DirectAdded(WaypointList wptList, Waypoint wpt, int rwyIndex)
        {
            foreach (var i in wptList.EdgesFrom(wptList.FindByWaypoint(wpt)))
            {
                var    edge    = wptList.GetEdge(i);
                double disDiff = wpt.Distance(wptList[rwyIndex]) - edge.Value.Distance;

                if (edge.Value.Airway == "DCT" &&
                    Math.Abs(disDiff) < DistanceEpsilon)
                {
                    return(true);
                }
            }

            return(false);
        }
Esempio n. 8
0
        private List <int> FindWptOnAirwayOneDir(FindOnAwyOption para)
        {
            var  result         = new List <int>();
            bool canStartSearch = para == FindOnAwyOption.First;

            int  currentIndex = indexStart;
            int  prevIndex    = -1;
            var  currentWpt   = wptList[currentIndex];
            bool endReached   = false;

            while (endReached == false)
            {
                endReached = true;

                foreach (int i in wptList.EdgesFrom(currentIndex))
                {
                    var edge  = wptList.GetEdge(i);
                    var n     = edge.Value;
                    int index = edge.ToNodeIndex;

                    if (n.Airway == airway && index != prevIndex)
                    {
                        if (canStartSearch)
                        {
                            prevIndex    = currentIndex;
                            currentIndex = index;
                            currentWpt   = wptList[currentIndex];
                            result.Add(currentIndex);

                            if (currentWpt.ID == identEnd)
                            {
                                return(result);
                            }

                            endReached = false;
                            break;
                        }
                        else
                        {
                            canStartSearch = true;
                        }
                    }
                }
            }

            return(null);
        }
Esempio n. 9
0
        public void AddsMainRouteCorrectly()
        {
            // Arrange
            var p1 = new Waypoint("P1", 0.0, 0.0);
            var p2 = new Waypoint("P2", 0.0, 2.0);
            var p3 = new Waypoint("P3", 0.0, 4.0);

            var wptList = new WaypointList();

            wptList.AddWaypoint(p1);
            wptList.AddWaypoint(p2);
            wptList.AddWaypoint(p3);

            var route = new Route();

            route.AddLastWaypoint(p1);
            route.AddLastWaypoint(p2, "DCT");
            route.AddLastWaypoint(p3, "DCT");
            var nodes = new TrackNodes("A", "NATA", route, new WptPair[0]);

            var adder = new TrackAdder(
                wptList,
                wptList.GetEditor(),
                new StatusRecorder(),
                TrackType.Nats);

            // Act
            adder.AddToWaypointList(new[] { nodes });

            // Assert
            int indexP1 = wptList.FindByWaypoint(p1);

            Assert.AreEqual(1, wptList.EdgesFromCount(indexP1));

            var edge     = wptList.EdgesFrom(indexP1).First();
            var neighbor = wptList.GetEdge(edge).Value;

            Assert.IsTrue(neighbor.Airway == "NATA");

            Assert.IsTrue(neighbor.InnerWaypoints.SequenceEqual(CreateList(p2)));
            Assert.AreEqual(InnerWaypointsType.Track, neighbor.Type);

            var distance = p1.Distance(p2) + p2.Distance(p3);

            Assert.AreEqual(distance, neighbor.Distance);
        }
Esempio n. 10
0
        private bool TryParseAwy(string airway)
        {
            if (lastWpt == -1)
            {
                return(false);
            }

            foreach (var i in wptList.EdgesFrom(lastWpt))
            {
                if (wptList.GetEdge(i).Value.Airway == airway)
                {
                    lastAwy = airway;
                    return(true);
                }
            }

            return(false);
        }