コード例 #1
0
 public void ThreeStateOnOnOff()
 {
     var timeline = new ActivityTimeline();
     var testDuration = new TimeSpan(0, 1, 0, 0);
     var timeStep = new TimeSpan(0, 0, 0, 1);
     var halfStep = new TimeSpan(timeStep.Ticks / 2);
     var onDuration = new TimeSpan(0, 0, 0, 0, 1500);
     var offDuration = new TimeSpan(0, 0, 0, 0, 1500);
     while (timeline.Duration < testDuration)
     {
         timeline.AddActivity(true, onDuration);
         timeline.AddActivity(false, offDuration);
     }
     Assert.GreaterOrEqual(timeline.Duration, testDuration);
     var activeTimes = timeline.GetActiveTimes(timeStep);
     var state = 0;
     foreach (var activeTime in activeTimes)
     {
         switch(state)
         {
             case 0:
                 Assert.AreEqual(timeStep, activeTime);
                 break;
             case 1:
                 Assert.AreEqual(halfStep, activeTime);
                 break;
             case 2:
                 Assert.AreEqual(0, activeTime.Ticks);
                 break;
             default:
                 throw new ApplicationException("Should never see this");
         }
         state = (state + 1) % 3;
     }
 }
コード例 #2
0
 public PlatformBehavior(Platform platform, TimeSpan timeStep, int timeStepCount)
 {
     Platform = platform;
     _timeStep = timeStep;
     _timeStepCount = timeStepCount;
     _duration = new TimeSpan(_timeStep.Ticks * (timeStepCount + 1));
     try
     {
         _modeActiveTimes = new Dictionary<Mode, IList<TimeSpan>>();
         foreach (var source in Platform.Sources)
             foreach (var mode in source.Modes)
             {
                 var modeTimeline = new ActivityTimeline();
                 while (modeTimeline.Duration < _duration)
                 {
                     //Debug.WriteLine(string.Format("Mode {0} active {1} inactive {2} at {3}", mode.PSMName, (TimeSpan)mode.PulseLength, (TimeSpan)mode.PulseInterval - (TimeSpan)mode.PulseLength, modeTimeline.Duration));
                     modeTimeline.AddActivity(true, mode.PulseLength);
                     modeTimeline.AddActivity(false, (TimeSpan)mode.PulseInterval - mode.PulseLength);
                 }
                 var activeTimes = modeTimeline.GetActiveTimes(_timeStep).ToList();
                 Debug.WriteLine(string.Format("Mode {0} is active for {1} across {2} time steps", mode.PSMName, new TimeSpan(activeTimes.Sum(t => t.Ticks)), _timeStepCount));
                 _modeActiveTimes.Add(mode, activeTimes);
             }
     }
     catch (Exception e)
     {
         throw new PlatformBehaviorException(string.Format("Error initializing behavior for {0}", Platform.PlatformName), e);
     }
 }
コード例 #3
0
 public void AlwaysOn()
 {
     var timeline = new ActivityTimeline();
     var testDuration = new TimeSpan(0, 1, 0, 0);
     var timeStep = new TimeSpan(0, 0, 0, 1);
     var onDuration = new TimeSpan(0, 0, 0, 0, 33);
     var offDuration = new TimeSpan(0, 0, 0, 0);
     while (timeline.Duration < testDuration)
     {
         timeline.AddActivity(true, onDuration);
         timeline.AddActivity(false, offDuration);
     }
     Assert.GreaterOrEqual(timeline.Duration, testDuration);
     var activeTimes = timeline.GetActiveTimes(timeStep);
     foreach (var activeTime in activeTimes)
         Assert.AreEqual(timeStep, activeTime);
 }
コード例 #4
0
 public void TwoStateOnOff()
 {
     var timeline = new ActivityTimeline();
     var testDuration = new TimeSpan(0, 1, 0, 0);
     var timeStep = new TimeSpan(0, 0, 0, 1);
     var onDuration = new TimeSpan(0, 0, 0, 0, 500);
     var offDuration = new TimeSpan(0, 0, 0, 0, 1500);
     while (timeline.Duration < testDuration)
     {
         timeline.AddActivity(true, onDuration);
         timeline.AddActivity(false, offDuration);
     }
     Assert.GreaterOrEqual(timeline.Duration, testDuration);
     var activeTimes = timeline.GetActiveTimes(timeStep);
     var isActive = true;
     foreach (var activeTime in activeTimes)
     {
         Assert.AreEqual(activeTime, isActive ? onDuration : TimeSpan.Zero);
         isActive = !isActive;
     }
 }