public void Common() { AutoResetEvent signal = new AutoResetEvent(false); int times = 0; List <long> elapseds = new List <long>(); Stopwatch temp = new Stopwatch(); IntervalAction action = new IntervalAction(50, handle); signal.WaitOne(); var average = elapseds.Average(); var range = new NumericalRangeInt(50, 0.2f); Assert.IsTrue(range.Contains((int)average)); void handle(IntervalAction sender) { times++; if (temp.IsRunning) { elapseds.Add(temp.ElapsedMilliseconds); } temp.Restart(); if (times >= 10) { sender.Dispose(); signal.Set(); } } }
public void HighLoad1() { var nutrientOutputRunTime = new SatietyTestHelper.TimeRange(0, 0); if (this.IsSingle) { var breakDownTime = new SatietyTestHelper.TimeRange(75, 85); var range = new NumericalRangeInt(80, 0.2f); SatietyTestHelper helper = new SatietyTestHelper(this.IsSingle, 5, 50, 0, 0, breakDownTime, nutrientOutputRunTime); var elapseds = helper.Start(); Assert.IsTrue(range.Contains((int)elapseds.Average())); } else { { var breakDownTime = new SatietyTestHelper.TimeRange(30, 30); //吃食物的时间间隔为100毫秒 //在1对多模式下,每个养分输出时间为100/n(SatietyTestHelper中n为5,也就是20毫秒) //我们设置粉碎时间为30毫秒,但是每粉碎1个食物,可以获得5个养分,这5个养分的输出总时间是100毫秒 //因此,输出的总时间是高于粉碎时间的,那么平均输出时间依然是20毫秒 var range = new NumericalRangeInt(20, 0.2f); SatietyTestHelper helper = new SatietyTestHelper(this.IsSingle, 5, 100, 0, 0, breakDownTime, nutrientOutputRunTime); var elapseds = helper.Start(); var average = (int)elapseds.Average(); Assert.IsTrue(range.Contains(average)); } { var breakDownTime = new SatietyTestHelper.TimeRange(200, 200); //吃食物的时间间隔为100毫秒 //在1对多模式下,每个养分输出时间应该为100/n(SatietyTestHelper中n为5,也就是20毫秒) //但是我们设置粉碎时间为200毫秒,大于吃食物的时间 //那么获取养分的周期应该是200毫秒,每粉碎1个食物,可以获得5个养分,这5个养分的输出间隔应该是40毫秒 var range = new NumericalRangeInt(40, 0.2f); SatietyTestHelper helper = new SatietyTestHelper(this.IsSingle, 5, 100, 0, 0, breakDownTime, nutrientOutputRunTime); var elapseds = helper.Start(); var average = (int)elapseds.Average(); Assert.IsTrue(range.Contains(average)); } } }
public void HighResolutionSleep() { const int times = 100; //运行次数 const int sleepTime = 10; //毫秒 Stopwatch watch = new Stopwatch(); MediaDelayer delayer = new MediaDelayer(); long elapsed = 0; for (var i = 0; i < times; i++) { watch.Restart(); delayer.Sleep(sleepTime); elapsed += watch.ElapsedMilliseconds; } NumericalRangeInt nri = new NumericalRangeInt(sleepTime, 0.2f); var avg = (int)(elapsed / times); Assert.IsTrue(nri.Contains(avg)); }