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)); }
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); } }
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; })); }
private bool IsAirway(int lastIndex, string airway) { if (airway == "UPR") { return(true); } return(wptList.EdgesFrom(lastIndex).Any( i => wptList.GetEdge(i).Value.Airway == airway)); }
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); }
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); }
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); }
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); }
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); }
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); }