public void TestMetric24HrVs15Min() { //5030 has 8 phases, with 6 to 8 detectors per phase. There is Stop Bar, Lane-by-Lane Count, // Lane-by-Lane with Speed Restriction, Advanced Count, Advanced Spped as the detectin types for he different // detectors. THis signals has everything and is a good one to test for everything UDOT uses for a signal. var signalId = "5030"; int metricTypeId = 6; var stringstartTime = "10/24/2018 3:30 PM"; var startTime = DateTime.Parse(stringstartTime, System.Globalization.CultureInfo.InvariantCulture); var endTime24Hrs = startTime.AddDays(1); var endTime15Mins = startTime.AddMinutes(15); var signalRepository = SignalsRepositoryFactory.Create(); var signal = signalRepository.GetVersionOfSignalByDate(signalId, startTime); var metricApproaches = signal.GetApproachesForSignalThatSupportMetric(metricTypeId); if (metricApproaches.Count > 0) { foreach (var approach in metricApproaches) { var signalPhase24Hrs = new Common.Business.SignalPhase(startTime, endTime24Hrs, approach, true, 15, metricTypeId, false); var signalPhase15Mins = new Common.Business.SignalPhase(startTime, endTime15Mins, approach, true, 15, metricTypeId, false); Assert.IsTrue(signalPhase24Hrs.Cycles.Count > signalPhase15Mins.Cycles.Count); for (int i = 0; i < signalPhase15Mins.Cycles.Count; i++) { Assert.IsTrue(signalPhase24Hrs.Cycles[i].EndTime == signalPhase15Mins.Cycles[i].EndTime); Assert.IsTrue(signalPhase24Hrs.Cycles[i].GreenEvent == signalPhase15Mins.Cycles[i].GreenEvent); Assert.IsTrue(signalPhase24Hrs.Cycles[i].GreenLineY == signalPhase15Mins.Cycles[i].GreenLineY); Assert.IsTrue(signalPhase24Hrs.Cycles[i].RedLineY == signalPhase15Mins.Cycles[i].RedLineY); Assert.IsTrue(signalPhase24Hrs.Cycles[i].StartTime == signalPhase15Mins.Cycles[i].StartTime); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalArrivalOnGreen == signalPhase15Mins.Cycles[i].TotalArrivalOnGreen); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalArrivalOnRed == signalPhase15Mins.Cycles[i].TotalArrivalOnRed); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalArrivalOnYellow == signalPhase15Mins.Cycles[i].TotalArrivalOnYellow); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalDelay == signalPhase15Mins.Cycles[i].TotalDelay); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalGreenTime == signalPhase15Mins.Cycles[i].TotalGreenTime); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalGreenTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalGreenTimeMilliseconds); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalRedTime == signalPhase15Mins.Cycles[i].TotalRedTime); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalRedTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalRedTimeMilliseconds); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalTime == signalPhase15Mins.Cycles[i].TotalTime); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalTimeMilliseconds); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalVolume == signalPhase15Mins.Cycles[i].TotalVolume); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalYellowTime == signalPhase15Mins.Cycles[i].TotalYellowTime); Assert.IsTrue(signalPhase24Hrs.Cycles[i].TotalYellowTimeMilliseconds == signalPhase15Mins.Cycles[i].TotalYellowTimeMilliseconds); Assert.IsTrue(signalPhase24Hrs.Cycles[i].YellowEvent == signalPhase15Mins.Cycles[i].YellowEvent); Assert.IsTrue(signalPhase24Hrs.Cycles[i].YellowLineY == signalPhase15Mins.Cycles[i].YellowLineY); for (int j = 0; j < signalPhase15Mins.Cycles[i].DetectorEvents.Count; j++) { Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].ArrivalType == signalPhase15Mins.Cycles[i].DetectorEvents[j].ArrivalType); Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].Delay == signalPhase15Mins.Cycles[i].DetectorEvents[j].Delay); Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].TimeStamp == signalPhase15Mins.Cycles[i].DetectorEvents[j].TimeStamp); Assert.IsTrue(signalPhase24Hrs.Cycles[i].DetectorEvents[j].YPoint == signalPhase15Mins.Cycles[i].DetectorEvents[j].YPoint); } } } } }
public void PCDVolumeUnitTest() { DateTime start = Convert.ToDateTime("1/1/2014 12:00 AM"); DateTime end = Convert.ToDateTime("1/1/2014 12:15 AM"); var directionRepository = DirectionTypeRepositoryFactory.Create(); var directions = directionRepository.GetAllDirections(); var signalRepository = MOE.Common.Models.Repositories.SignalsRepositoryFactory.Create(); var signal = signalRepository.GetVersionOfSignalByDate("7328", start); var approaches = signal.GetApproachesForSignalThatSupportMetric(6); List <Common.Business.SignalPhase> signalPhaseList = new List <Common.Business.SignalPhase>(); foreach (MOE.Common.Models.Approach approach in approaches) { var protectedSignalPhase = new Common.Business.SignalPhase(start, end, approach, false, 15, 6, false); signalPhaseList.Add(protectedSignalPhase); if (approach.PermissivePhaseNumber.HasValue) { var permissiveSignalPhase = new Common.Business.SignalPhase(start, end, approach, false, 15, 6, true); signalPhaseList.Add(permissiveSignalPhase); } } ApproachVolumeOptions approachVolumeOptions = new ApproachVolumeOptions("7328", start, end, null, 15, true, true, true, true, true, true); Common.Business.ApproachVolume.ApproachVolume nSadvanceCountApproachVolume = null; Common.Business.ApproachVolume.ApproachVolume nSlaneByLaneCountApproachVolume = null; Common.Business.ApproachVolume.ApproachVolume eWadvanceCountApproachVolume = null; Common.Business.ApproachVolume.ApproachVolume eWlaneByLaneCountApproachVolume = null; if (directions.Any(d => d.Description == "Northbound") || directions.Any(d => d.Description == "Southbound")) { DirectionType northboundDirection = directions.FirstOrDefault(d => d.Description == "Northbound"); DirectionType southboundDirection = directions.FirstOrDefault(d => d.Description == "Southbound"); List <MOE.Common.Models.Approach> northboundApproaches = signal.Approaches .Where(a => a.DirectionTypeID == northboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList(); List <MOE.Common.Models.Approach> southboundApproaches = signal.Approaches .Where(a => a.DirectionTypeID == southboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList(); nSadvanceCountApproachVolume = new Common.Business.ApproachVolume.ApproachVolume(northboundApproaches, southboundApproaches, approachVolumeOptions, northboundDirection, southboundDirection, 2); nSlaneByLaneCountApproachVolume = new Common.Business.ApproachVolume.ApproachVolume(northboundApproaches, southboundApproaches, approachVolumeOptions, northboundDirection, southboundDirection, 4); } if (directions.Any(d => d.Description == "Westbound") || directions.Any(d => d.Description == "Eastbound")) { DirectionType eastboundDirection = directions.FirstOrDefault(d => d.Description == "Eastbound"); DirectionType westboundDirection = directions.FirstOrDefault(d => d.Description == "Westbound"); var eastboundApproaches = signal.Approaches .Where(a => a.DirectionTypeID == eastboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList(); var westboundApproaches = signal.Approaches .Where(a => a.DirectionTypeID == westboundDirection.DirectionTypeID && a.ProtectedPhaseNumber != 0).ToList(); eWadvanceCountApproachVolume = new Common.Business.ApproachVolume.ApproachVolume(eastboundApproaches, westboundApproaches, approachVolumeOptions, eastboundDirection, westboundDirection, 2); eWlaneByLaneCountApproachVolume = new Common.Business.ApproachVolume.ApproachVolume(eastboundApproaches, westboundApproaches, approachVolumeOptions, eastboundDirection, westboundDirection, 4); } double pcdVolume = signalPhaseList.Sum(s => s.TotalVolume); double approachVolume = nSadvanceCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount) + nSlaneByLaneCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount) + eWadvanceCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount) + eWlaneByLaneCountApproachVolume.CombinedDirectionsVolumes.Items.Sum(d => d.DetectorCount); List <DateTime> signalPhaseDetectorActivations = new List <DateTime>(); foreach (var signalPhase in signalPhaseList) { foreach (var signalPhaseCycle in signalPhase.Cycles) { foreach (var detectorDataPoint in signalPhaseCycle.DetectorEvents) { signalPhaseDetectorActivations.Add(detectorDataPoint.TimeStamp); } } } signalPhaseDetectorActivations.Sort(); List <DateTime> approachVolumeDetectorActivations = new List <DateTime>(); foreach (var combinedDirectionsVolume in nSadvanceCountApproachVolume.PrimaryDetectorEvents) { approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp); } foreach (var combinedDirectionsVolume in nSlaneByLaneCountApproachVolume.PrimaryDetectorEvents) { approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp); } foreach (var combinedDirectionsVolume in eWadvanceCountApproachVolume.PrimaryDetectorEvents) { approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp); } foreach (var combinedDirectionsVolume in eWlaneByLaneCountApproachVolume.PrimaryDetectorEvents) { approachVolumeDetectorActivations.Add(combinedDirectionsVolume.Timestamp); } approachVolumeDetectorActivations.Sort(); for (int i = 0; i < approachVolumeDetectorActivations.Count; i++) { DateTime signalPhaseTimeStamp = signalPhaseDetectorActivations[i]; DateTime approachVolumeTimeStamp = approachVolumeDetectorActivations[i + 14]; Assert.IsTrue(signalPhaseTimeStamp == approachVolumeTimeStamp); } //Common.Business.ApproachVolume.ApproachVolume advanceCountApproachVolume = // new Common.Business.ApproachVolume.ApproachVolume(primaryApproaches, opposingApproaches, this, primaryDirection, opposingDirection, 2); }