public void Virtual_ScheduleAction()
        {
            var id        = Thread.CurrentThread.ManagedThreadId;
            var ran       = false;
            var scheduler = new VirtualSchedulerTestScheduler();

            scheduler.Schedule(() => { Assert.Equal(id, Thread.CurrentThread.ManagedThreadId); ran = true; });
            scheduler.Start();
            Assert.True(ran);
        }
        public void Virtual_ScheduleActionDue()
        {
            var id        = Thread.CurrentThread.ManagedThreadId;
            var ran       = false;
            var scheduler = new VirtualSchedulerTestScheduler();

            scheduler.Schedule(TimeSpan.FromSeconds(0.2), () => { Assert.Equal(id, Thread.CurrentThread.ManagedThreadId); ran = true; });
            scheduler.Start();
            Assert.True(ran, "ran");
        }
        public void Virtual_ScheduleActionDue()
        {
            var id  = Thread.CurrentThread.ManagedThreadId;
            var ran = false;
            var sw  = new Stopwatch();

            sw.Start();
            var scheduler = new VirtualSchedulerTestScheduler();

            scheduler.Schedule(TimeSpan.FromSeconds(0.2), () => { sw.Stop(); Assert.Equal(id, Thread.CurrentThread.ManagedThreadId); ran = true; });
            scheduler.Start();
            Assert.True(ran, "ran");
            Assert.True(sw.ElapsedMilliseconds > 180, "due " + sw.ElapsedMilliseconds);
        }
        public void Virtual_ScheduleActionError()
        {
            var ex = new Exception();

            try
            {
                var scheduler = new VirtualSchedulerTestScheduler();
                scheduler.Schedule(() => { throw ex; });
                scheduler.Start();
                Assert.True(false);
            }
            catch (Exception e)
            {
                Assert.Same(e, ex);
            }
        }
        public void Virtual_InitialAndComparer_Now()
        {
            var s = new VirtualSchedulerTestScheduler("Bar", Comparer <string> .Default);

            Assert.Equal(3, s.Now.Ticks);
        }
        public void Virtual_Now()
        {
            var res = new VirtualSchedulerTestScheduler().Now - DateTime.Now;

            Assert.True(res.Seconds < 1);
        }