private bool IsInCloseAirspace(IFlightTrack track1, IFlightTrack track2) { var altitudeMeter = 300; var horizontitalPlaneMeter = 500; return(CalculateHorizontialDistance(track1, track2) < 5000 && CalculateVerticalDistance(track1, track2) < altitudeMeter); }
public void SetUp() { _flightTracksUpdatedCounter = 0; _enterExitEventDetectedCounter = 0; _enteredCounter = 0; _exitedCounter = 0; _enterExitEventsDetected = new List <EnterExitEvent>(); _datasource = Substitute.For <IFlightTrackManager>(); _datasource.FlightTracksUpdated += (sender, args) => _flightTracksUpdatedCounter++; _uut = new EnterExitEventDetector(_datasource); _uut.EnterExitEventDetected += (sender, args) => { _enterExitEventsDetected.Add(args.Event); _lastEnterExitEventDetected = args.Event; _enterExitEventDetectedCounter++; if (args.Event.Entered) { _enteredCounter++; } else { _exitedCounter++; } }; _flight1 = Substitute.For <IFlightTrack>(); _flight2 = Substitute.For <IFlightTrack>(); _flight1.GetTag().Returns("TAG123"); _flight1.GetLastUpdatedAt().Returns(DateTime.Now); _flight2.GetTag().Returns("TAG456"); _flight2.GetLastUpdatedAt().Returns(DateTime.Now); }
public void WhenRaisingTransponderDataReady_GivenFlightIsWithinAirspace_CreateFlightTrack_ThatASubscriperCanReceive(string rawData, string expTag, int expLat, int expLong, int expAlt) { // ARRANGE var transponderData = new List <string>(); transponderData.Add(rawData); _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(true); IFlightTrack persistedArgs = null; _sut.EnteredAirspace += (sender, e) => { persistedArgs = e.FlightTrack; }; //ACT _fakeTransponder.TransponderDataReady += Raise.EventWith(_fakeTransponder, new RawTransponderDataEventArgs(transponderData)); // ASSERT Assert.That(persistedArgs.Tag, Is.Not.Null); Assert.That(persistedArgs.NavigationCourse, Is.EqualTo(double.NaN)); Assert.That(persistedArgs.Velocity, Is.EqualTo(0)); Assert.That(persistedArgs.LatestTime, Is.Not.EqualTo(DateTime.MinValue)); Assert.That(persistedArgs.Tag, Is.EqualTo(expTag)); Assert.That(persistedArgs.Position.Altitude, Is.EqualTo(expAlt)); Assert.That(persistedArgs.Position.Latitude, Is.EqualTo(expLat)); Assert.That(persistedArgs.Position.Longitude, Is.EqualTo(expLong)); }
public void SetUp() { _dataSource = Substitute.For <IFlightTrackManager>(); _area = Substitute.For <IAirspaceArea>(); _airspaceManager = new AirspaceManager(_dataSource, _area); _enterExitEventDetector = new EnterExitEventDetector(_airspaceManager); _uut = new EnterExitEventController(_enterExitEventDetector); _dataSource.FlightTracksUpdated += (o, args) => _inputEventCounter++; _uut.EnterExitEventsUpdated += (o, args) => { _lastReceivedEnterExitEvents = args.ActiveEvents; _outputEventCounter++; }; _flight1 = Substitute.For <IFlightTrack>(); _flight2 = Substitute.For <IFlightTrack>(); _flight1.GetTag().Returns("TAG123"); _flight1.GetLastUpdatedAt().Returns(DateTime.Now); _flight2.GetTag().Returns("TAG456"); _flight2.GetLastUpdatedAt().Returns(DateTime.Now); //Use IAirspaceArea substitute to manually emulate flight airspace filtering (alt = 1 inside, alt = 0 outside) _area.IsInside(Arg.Any <int>(), Arg.Any <int>(), Arg.Is <int>(x => x == 1)).Returns(true); _area.IsInside(Arg.Any <int>(), Arg.Any <int>(), Arg.Is <int>(x => x == 0)).Returns(false); }
private bool WithinTimespan(IFlightTrack track1, IFlightTrack track2) { TimeSpan interval = new TimeSpan(0, 0, 3); // 3 seconds if (track1.LatestTime - track2.LatestTime <= interval) { return(true); } return(false); }
public void SetUp() { _firstDataPoint = new FTDataPoint("ASH000", 2000, 2000, 22000, _testTime); _secondDataPoint = new FTDataPoint("ASH000", 1850, 2000, 22000, _testTime.AddSeconds(1.00)); _uut = new Flight(_firstDataPoint); //_uut.AddDataPoint(_firstDataPoint); //needed for check if velocity and course is correct set //_uut.AddDataPoint(_secondDataPoint); _testFullDataLog = new LinkedList <FTDataPoint>(); _testFullDataLog.AddFirst(_firstDataPoint); _testFullDataLog.AddFirst(_secondDataPoint); }
private void CheckForSeperationEvents(List <IFlightTrack> flights) { for (int i = 0; i < flights.Count; i++) { for (int j = i + 1; j < flights.Count; j++) { IFlightTrack f1 = flights[i]; IFlightTrack f2 = flights[j]; if (TracksConflicting(f1, f2)) { SeperationEvent detectedSeperation = new SeperationEvent(f1, f2); SeperationEventDetected?.Invoke(this, new SeperationDetectedEventArgs(detectedSeperation)); } } } }
public bool TracksConflicting(IFlightTrack f1, IFlightTrack f2) { double f1alt = f1.GetCurrentAltitude(); double f2alt = f2.GetCurrentAltitude(); Vector2 f1pos = f1.GetCurrentPosition(); Vector2 f2pos = f2.GetCurrentPosition(); if ((Math.Abs(f1alt - f2alt) < _altitude) && Vector2.Distance(f1pos, f2pos) < _distance) { return(true); } else { return(false); } }
public void SetUp() { _dataSource = Substitute.For <IFlightTrackManager>(); _dataSource.FlightTracksUpdated += (o, args) => _inputEventCounter++; _enterExitEventDetector = new EnterExitEventDetector(_dataSource); _uut = new EnterExitEventController(_enterExitEventDetector); _uut.EnterExitEventsUpdated += (o, args) => { _lastReceivedEnterExitEvents = args.ActiveEvents; _outputEventCounter++; }; _flight1 = Substitute.For <IFlightTrack>(); _flight2 = Substitute.For <IFlightTrack>(); _flight1.GetTag().Returns("TAG123"); _flight1.GetLastUpdatedAt().Returns(DateTime.Now); _flight2.GetTag().Returns("TAG456"); _flight2.GetLastUpdatedAt().Returns(DateTime.Now); }
public void SetUp() { //Event Counters _flightTracksUpdatedEventCount = 0; _airspaceUpdatedEventCount = 0; //Dependencies _datasource = Substitute.For <IFlightTrackManager>(); _datasource.FlightTracksUpdated += (sender, args) => _flightTracksUpdatedEventCount++; _area = Substitute.For <IAirspaceArea>(); _uut = new AirspaceManager(_datasource, _area); _uut.AirspaceContentUpdated += (sender, args) => { _airspaceUpdatedEventCount++; _airspaceUpdatedEventContent = args.AirspaceContent; }; _flight1 = Substitute.For <IFlightTrack>(); _flight2 = Substitute.For <IFlightTrack>(); }
public void SetUp() { _flightTracksUpdatedCounter = 0; _flight1a = Substitute.For <IFlightTrack>(); _flight1b = Substitute.For <IFlightTrack>(); _flight1c = Substitute.For <IFlightTrack>(); _flight2a = Substitute.For <IFlightTrack>(); _flight2b = Substitute.For <IFlightTrack>(); _flight2c = Substitute.For <IFlightTrack>(); _datasource = Substitute.For <IFlightTrackManager>(); _datasource.FlightTracksUpdated += (sender, args) => _flightTracksUpdatedCounter++; _uut = new SeperationEventDetector(_datasource); _uut.SeperationEventDetected += (sender, args) => { _lastDetectedSeperationEvent = args.DetectedEvent; _SeperationEventCount++; }; }
public void Not_RenderAnyTracksOutsideTheMonitoredAirSpace() { _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(true); var record = new FlightRecord() { Tag = "test flight", Position = new Position(0, 0, 0), Timestamp = DateTime.MinValue }; _fakeFlight.FlightRecordReceived += Raise.EventWith(_fakeFlight, new FlightRecordEventArgs(record)); IFlightTrack persistedArg = null; _uut.LeftAirspace += (sender, e) => { persistedArg = e.FlightTrack; }; _fakeMonitoredAirspace.HasPositionWithinBoundaries(Arg.Any <Position>()).Returns(false); _fakeFlight.FlightRecordReceived += Raise.EventWith(_fakeFlight, new FlightRecordEventArgs(record)); Assert.That(persistedArg, Is.Not.Null); }
private void OnFlightTrackDataReady(object o, FlightTrackDataEventArgs args) { Debug.Log("FlightManager: Handling FlightTrackDataReady event, recieved " + args.FTDataPoints.Count + " Datapoints"); List <FTDataPoint> recievedDataPoints = args.FTDataPoints; List <IFlightTrack> updatedflights = new List <IFlightTrack>(); foreach (var dp in args.FTDataPoints) { if (!_flights.Exists(x => x.GetTag() == dp.Tag)) { Debug.Log("New flight entered sensor range with tag '" + dp.Tag + "'"); _flights.Add(new Flight(dp)); } //Debug.Log("FlightManager: Adding datapoint to flight with tag '" + dp.Tag + "'"); IFlightTrack f = _flights.Find(x => x.GetTag() == dp.Tag); f.AddDataPoint(dp); updatedflights.Add(f); } Debug.Log("FlightManager: Invoking FlightTracksUpdated, sending list of " + updatedflights.Count + " updated flights"); FlightTracksUpdated?.Invoke(this, new FlightTracksUpdatedEventArgs(updatedflights)); }
public EnterExitEvent(IFlightTrack flight, bool entered) : base("Airspace", "Flight " + flight.GetTag() + " has " + ((entered) ? "entered" : "left") + " airspace at " + flight.GetLastUpdatedAt().ToLongTimeString()) { Flight = flight; Entered = entered; }
public SeperationEvent(IFlightTrack flight_A, IFlightTrack flight_B) : base("Seperation", flight_A.GetTag() + " and " + flight_B.GetTag()) { Flight_A = flight_A; Flight_B = flight_B; }
public FlightTrackUpdatedEventArgs(IFlightTrack flight) { UpdatedFlight = flight; }
public FlightTrackEventArgs(IFlightTrack track) { FlightTrack = track; }
private double CalculateHorizontialDistance(IFlightTrack track1, IFlightTrack track2) //checks if new FlightTrack update's position is too close to any other flight { return(Math.Round(Math.Abs(Math.Pow(track1.Position.Latitude - track2.Position.Latitude, 2) + Math.Pow(track1.Position.Longitude - track2.Position.Longitude, 2)))); }
private double CalculateVerticalDistance(IFlightTrack track1, IFlightTrack track2) //checks if new FlightTrack update's altitude is too close to any other flight { return(Math.Abs(track1.Position.Altitude - track2.Position.Altitude)); }