Akka.Tests.Actor.Scheduler.DedicatedThreadScheduler_ActionScheduler_Schedule_Tests.ScheduleRepeatedly_in_milliseconds_Tests_and_verify_the_interval C# (CSharp) Method

ScheduleRepeatedly_in_milliseconds_Tests_and_verify_the_interval() private method

private ScheduleRepeatedly_in_milliseconds_Tests_and_verify_the_interval ( int initialDelay, int interval ) : void
initialDelay int
interval int
return void
        public void ScheduleRepeatedly_in_milliseconds_Tests_and_verify_the_interval(int initialDelay, int interval)
        {
            // Prepare, set up actions to be fired
            IActionScheduler scheduler = new DedicatedThreadScheduler(Sys);

            var cancelable = new Cancelable(Sys.Scheduler);
            var receiver = ActorOf(dsl =>
            {
                //Receive three messages, and store the time when these were received
                //after three messages stop the actor and send the times to TestActor
                var messages = new List<DateTimeOffset>();
                dsl.Receive<string>((s, context) =>
                {
                    messages.Add(context.System.Scheduler.Now);
                    if(messages.Count == 3)
                    {
                        TestActor.Tell(messages);
                        cancelable.Cancel();
                        context.Stop(context.Self);
                    }
                });
            });
            scheduler.ScheduleRepeatedly(initialDelay, interval, () => receiver.Tell(""), cancelable);

            //Expect to get a list from receiver after it has received three messages
            var dateTimeOffsets = ExpectMsg<List<DateTimeOffset>>();
            dateTimeOffsets.ShouldHaveCount(3);
            Action<int, int> validate = (a, b) =>
            {
                var valA = dateTimeOffsets[a];
                var valB = dateTimeOffsets[b];
                var diffBetweenMessages = Math.Abs((valB - valA).TotalMilliseconds);
                var diffInMs = Math.Abs(diffBetweenMessages - interval);
                var deviate = (diffInMs / interval);
                deviate.Should(val => val < 0.1, string.Format("Expected the interval between message {1} and {2} to deviate maximum 10% from {0}. It was {3} ms between the messages. It deviated {4}%", interval, a + 1, b + 1, diffBetweenMessages, deviate * 100));
            };
            validate(0, 1);
            validate(1, 2);
        }