public IEnumerator TestTimeSlicedMonoRunner()
        {
            yield return(null);

            var frames = 0;

            using (var timeSlicedMonoRunner = new TimeSlicedMonoRunner("timesliced", 2000))
            {
                ValueObject val        = new ValueObject();
                var         yieldBreak = TimeSlicedYield(val);
                yieldBreak.RunOnScheduler(timeSlicedMonoRunner);
                var yieldBreak1 = TimeSlicedYield(val);
                yieldBreak1.RunOnScheduler(timeSlicedMonoRunner);
                var yieldBreak2 = TimeSlicedYield(val);
                yieldBreak2.RunOnScheduler(timeSlicedMonoRunner);
                var yieldBreak3 = TimeSlicedYield(val);
                yieldBreak3.RunOnScheduler(timeSlicedMonoRunner);

                DateTime then = DateTime.Now;

                frames++;
                timeSlicedMonoRunner.Step(); //first iteration of the runner so that the tasks are filled

                while (timeSlicedMonoRunner.numberOfRunningTasks > 0)
                {
                    frames++;
                    val.counter++;
                    timeSlicedMonoRunner.Step();
                    yield return(null);
                }

                Assert.That((DateTime.Now - then).TotalMilliseconds < 1900);
                Assert.That(frames, Is.EqualTo(1));
                Assert.That(yieldBreak.Current, Is.EqualTo(100));
                Assert.That(yieldBreak1.Current, Is.EqualTo(100));
                Assert.That(yieldBreak2.Current, Is.EqualTo(100));
                Assert.That(yieldBreak3.Current, Is.EqualTo(100));
            }
        }
        public IEnumerator TestTimeSlicedMonoRunnerSliced()
        {
            yield return(null);

            var frames = 0;

            using (var timeSlicedMonoRunner = new TimeSlicedMonoRunner("timesliced2", 2))
            {
                ValueObject val        = new ValueObject();
                var         yieldBreak = TimeSlicedYieldNormal(val);
                yieldBreak.RunOnScheduler(timeSlicedMonoRunner);
                var yieldBreak1 = TimeSlicedYieldNormal(val);
                yieldBreak1.RunOnScheduler(timeSlicedMonoRunner);
                var yieldBreak2 = TimeSlicedYieldNormal(val);
                yieldBreak2.RunOnScheduler(timeSlicedMonoRunner);
                var yieldBreak3 = TimeSlicedYieldNormal(val);
                yieldBreak3.RunOnScheduler(timeSlicedMonoRunner);

                frames++;
                timeSlicedMonoRunner.Step(); //first iteration of the runner so that the tasks are filled

                while (timeSlicedMonoRunner.numberOfRunningTasks > 0)
                {
                    frames++;
                    val.counter++;
                    timeSlicedMonoRunner.Step();
                    yield return(null);
                }

                Assert.That(frames, Is.GreaterThan(1));
                Assert.That(yieldBreak.Current, Is.EqualTo(100));
                Assert.That(yieldBreak1.Current, Is.EqualTo(100));
                Assert.That(yieldBreak2.Current, Is.EqualTo(100));
                Assert.That(yieldBreak3.Current, Is.EqualTo(100));
            }
        }