public void GenerateRandomValue_GenerateRandomDataSamples_SamplesAreSpreadRandomly(int min, int max, int meanBucketSize, decimal tolerance) { var elemInRange = (long)max - min + 1; var samples = elemInRange * meanBucketSize; var lowerBound = (int)(meanBucketSize * (1 - tolerance)); var upperBound = (int)(meanBucketSize * (1 + tolerance)); var buckets = new int[elemInRange]; for (var i = 0; i < samples; ++i) { var sample = SecureRandom.GenerateRandomValue(min, max); var sampleBucketIdx = sample - min; buckets[sampleBucketIdx] += 1; } var sb = new StringBuilder(); var allValuesIsMean = buckets.All(x => x == meanBucketSize); if (allValuesIsMean) { sb.AppendLine("All bucket are equal"); } else { for (var i = 0; i < buckets.Length; ++i) { if (buckets[i] < lowerBound || buckets[i] > upperBound) { sb.AppendLine($"Bucket for value {i + min} contained {buckets[i]} samples which is outside the range [{lowerBound}, {upperBound}]"); } } } if (sb.Length > 0) { Assert.Fail(sb.ToString()); } }
public void GenerateRandomValue_MaxIsLessOrEqualToMin_ThrowsArgumentException(int min, int max) { var ex = Assert.Throws <ArgumentException>(() => SecureRandom.GenerateRandomValue(min, max)); Assert.That(ex.ParamName, Is.EqualTo("max"), nameof(ex.ParamName)); }
public void GenerateRandomValue_MaxIsGreaterThanMin_DoesNotThrow(int min, int max) { var actual = SecureRandom.GenerateRandomValue(min, max); Assert.That(actual, Is.GreaterThanOrEqualTo(min).And.LessThanOrEqualTo(max)); }
///<summary>Retruns a random int within range.Including max number.</summary> public static int getRandomUnsignedIntFromRange(int min, int max) => SecureRandom.GenerateRandomValue(min, max);