public void RestoreTimeIsLinear()
        {
            var createCheckpointInterval = TimeSpan.FromMinutes(10);
            var heartbeatInterval        = TimeSpan.FromMinutes(1);
            var restoreDelta             = RestoreCheckpointPacemaker.ComputeRestoreTime(createCheckpointInterval, 10, 1);

            restoreDelta.Should().Be(TimeSpan.FromMinutes(1));
        }
        public void SampledBucketIsInRange(int numSamples, uint buckets)
        {
            var gen = ThreadSafeRandom.Generator;

            for (var i = 0; i < numSamples; ++i)
            {
                var bucket = RestoreCheckpointPacemaker.SampleBucket(buckets, gen.NextDouble());
                bucket.Should().BeInRange(0, buckets);
            }
        }
        public void SampledIdentifiersAreBetween0And1(int numSamples)
        {
            var checkpointTime = DateTime.UtcNow;

            for (var i = 0; i < numSamples; ++i)
            {
                var sample = RestoreCheckpointPacemaker.SampleIdentifier(ThreadSafeRandom.GetBytes(10), checkpointTime);
                sample.Should().BeInRange(0, 1);
            }
        }
        public void SampledIdentifiersDontChangeUnlessCheckpointTimeDoes(int numSamples)
        {
            for (var i = 0; i < numSamples; ++i)
            {
                var checkpointTime = DateTime.UtcNow;
                var machine        = ThreadSafeRandom.GetBytes(10);

                var sample1 = RestoreCheckpointPacemaker.SampleIdentifier(machine, checkpointTime);
                var sample2 = RestoreCheckpointPacemaker.SampleIdentifier(machine, checkpointTime);
                sample1.Should().Be(sample2);

                var checkpointTime2 = checkpointTime + TimeSpan.FromSeconds(1);
                var sample3         = RestoreCheckpointPacemaker.SampleIdentifier(machine, checkpointTime2);
                var sample4         = RestoreCheckpointPacemaker.SampleIdentifier(machine, checkpointTime2);

                sample1.Should().NotBe(sample3);
                sample3.Should().Be(sample4);
            }
        }