public void TestSchedluler() { List <int> taskTimings = new List <int>(); for (int i = 0; i < 1000; i++) { taskTimings.Add(i + 5); taskTimings.Add(i / 2 + 100); } TaskScheduler ts = new TaskScheduler(); List <TimingTestTask> testTasks = new List <TimingTestTask>(); // create tasks for (int i = 0; i < taskTimings.Count; i++) { TimingTestTask task = new TimingTestTask() { ExpectedDelay = taskTimings[i], Id = i }; testTasks.Add(task); } int executedTasks = 0; foreach (var task in testTasks) { task.StartCounting(); ts.SchedluleTask(() => { task.Executed(); Interlocked.Increment(ref executedTasks); }, TimeSpan.FromMilliseconds(task.ExpectedDelay)); } Thread.Sleep(11000); Thread.MemoryBarrier(); decimal meanAbsoluteError = 0; foreach (var task in testTasks) { if (task.WasExecuted != 1) { Console.WriteLine("Task {0} was not executed !", task.Id); } meanAbsoluteError += Math.Abs(task.ActualDelay - task.ExpectedDelay); Console.WriteLine("Exptected: {0}\tActual: {1}", task.ExpectedDelay, task.ActualDelay); } meanAbsoluteError /= testTasks.Count; Console.WriteLine("Total: {0}\tExecuted: {1}", testTasks.Count, executedTasks); Console.WriteLine("MAE: {0}", meanAbsoluteError); }
public void TestSchedluler() { List <int> taskTimings = new List <int>(); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); taskTimings.Add(400); taskTimings.Add(54); taskTimings.Add(774); TaskScheduler ts = new TaskScheduler(); List <TimingTestTask> testTasks = new List <TimingTestTask>(); // create tasks for (int i = 0; i < taskTimings.Count; i++) { TimingTestTask task = new TimingTestTask() { ExpectedDelay = taskTimings[i], Id = i }; testTasks.Add(task); if (i % 11 == 0) { Thread.Sleep(1000); } } foreach (var task in testTasks) { task.StartCounting(); ts.SchedluleTask(task.Executed, TimeSpan.FromMilliseconds(task.ExpectedDelay)); } Thread.Sleep(5000); decimal meanAbsoluteError = 0; foreach (var task in testTasks) { Check.That(task.WasExecuted); meanAbsoluteError += Math.Abs(task.ActualDelay - task.ExpectedDelay); } meanAbsoluteError /= testTasks.Count; Check.That(meanAbsoluteError).IsLessThan(10); }