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; } }
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); } }
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); }
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; } }