public void TestActionExecutionCounting()
        {
            using (var taskScheduler2 = new TaskScheduler(Mock.Of <IShamanLogger>()))
            {
                _taskScheduler.Schedule(() => { Thread.Sleep(100); }, 10);
                _taskScheduler.Schedule(() => { Thread.Sleep(100); }, 10);
                taskScheduler2.Schedule(() => { Thread.Sleep(100); }, 10);
                Thread.Sleep(20);

                // schedulers tasks triggers only in second
                PendingTask.GetExecutingActionsCount().Should().Be(3);
            }
            Thread.Sleep(100);// wait task ends
        }
        public void TaskCountingDelayedTasksTest()
        {
            using (var taskScheduler2 = new TaskScheduler(Mock.Of <IShamanLogger>()))
            {
                _taskScheduler.Schedule(() => { Thread.Sleep(100); }, 10);
                _taskScheduler.Schedule(() => { Thread.Sleep(100); }, 10);
                _taskScheduler.Schedule(() => { Thread.Sleep(100); }, 10);
                _taskScheduler.Schedule(() => { Thread.Sleep(100); }, 10);

                PendingTask.GetActiveTimersCount().Should().Be(4);

                taskScheduler2.Schedule(() => { Thread.Sleep(100); }, 10);

                PendingTask.GetActiveTimersCount().Should().Be(5);
            }
        }
        public void TaskCountingPeriodShortLivingTasksTest()
        {
            using (var taskScheduler2 = new TaskScheduler(Mock.Of <IShamanLogger>()))
            {
                _taskScheduler.ScheduleOnInterval(() => { Thread.Sleep(100); }, 10, 10, true);
                _taskScheduler.ScheduleOnInterval(() => { Thread.Sleep(100); }, 10, 10, true);
                _taskScheduler.ScheduleOnInterval(() => { Thread.Sleep(100); }, 10, 10, true);
                _taskScheduler.ScheduleOnInterval(() => { Thread.Sleep(100); }, 10, 10, true);

                PendingTask.GetActivePeriodicTimersCount().Should().Be(TaskSchedulerInternalPeriodicTimersCount);
                PendingTask.GetActivePeriodicSlTimersCount().Should().Be(4);

                taskScheduler2.ScheduleOnInterval(() => { Thread.Sleep(100); }, 10, 10, true);

                PendingTask.GetActivePeriodicTimersCount().Should().Be(TaskSchedulerInternalPeriodicTimersCount);
                PendingTask.GetActivePeriodicSlTimersCount().Should().Be(5);
            }
        }
        public void TaskCountingOneTimeTasksTest()
        {
            using (var taskScheduler2 = new TaskScheduler(Mock.Of <IShamanLogger>()))
            {
                _taskScheduler.ScheduleOnceOnNow(() => { Thread.Sleep(100); });
                _taskScheduler.ScheduleOnceOnNow(() => { Thread.Sleep(100); });
                taskScheduler2.ScheduleOnceOnNow(() => { Thread.Sleep(100); });
                taskScheduler2.ScheduleOnceOnNow(() => { Thread.Sleep(100); });

                TaskScheduler.GetGlobalScheduledOnceTasksCount().Should().Be(4);

                taskScheduler2.ScheduleOnceOnNow(() => { Thread.Sleep(100); });

                TaskScheduler.GetGlobalScheduledOnceTasksCount().Should().Be(5);

                Thread.Sleep(150);

                TaskScheduler.GetGlobalScheduledOnceTasksCount().Should().Be(0);
            }
        }
 public void Setup()
 {
     // to exclude test interferring
     _loggerMock    = new Mock <IShamanLogger>();
     _taskScheduler = new TaskScheduler(_loggerMock.Object);
 }