public void Next_WithNoArguments_ReturnsPositiveValues()
        {
            var rand     = new HashAlgorithmRandom(new SHA256CryptoServiceProvider());
            var samples  = 10000;
            var failures = 0;

            for (var i = 0; i < samples; i++)
            {
                var value = rand.Next();
                if (value < 0)
                {
                    failures++;
                }
            }

            Assert.Equal(0, failures);
        }
        public void NextDouble_Always_ReturnsValuesWithinRange()
        {
            var rand     = new HashAlgorithmRandom(new SHA256CryptoServiceProvider());
            var samples  = 1000000;
            var failures = 0;

            for (var i = 0; i < samples; i++)
            {
                var value = rand.NextDouble();
                if (value >= 1 || value < 0)
                {
                    failures++;
                }
            }

            Assert.Equal(0, failures);
        }
        public void Next_WithMinAndMaxValues_ReturnsValuesWithinTheRange(int minValue, int maxValue)
        {
            var rand     = new HashAlgorithmRandom(new SHA256CryptoServiceProvider());
            var samples  = 10000;
            var failures = 0;

            for (var i = 0; i < samples; i++)
            {
                var value = rand.Next(minValue, maxValue);
                if (value < minValue || value > maxValue || (value == maxValue && maxValue > minValue))
                {
                    failures++;
                }
            }

            Assert.Equal(0, failures);
        }