Files
archived-discord-bot/Tests/RandomTests.cs
2025-05-15 23:18:10 +05:00

38 lines
1.3 KiB
C#

using System;
using NUnit.Framework;
namespace Tests;
[TestFixture]
public class RandomTests
{
[Explicit]
[TestCase(6, 100_000_000, 0.1)]
public void DistributionUniformityTest(int dice, int sampleCount, double expectedDeviation)
{
var counterNaive = new int[dice];
var counterRange = new int[dice];
var rng = new Random();
for (var i = 0; i < sampleCount; i++)
{
counterNaive[rng.Next(dice)]++;
counterRange[rng.Next(1, dice + 1) - 1]++;
}
var expectedMedian = sampleCount / (double)dice;
Console.WriteLine("Naive\tRange");
Assert.Multiple(() =>
{
for (var i = 0; i < dice; i++)
{
var devNaive = GetPercent(counterNaive[i], expectedMedian);
var devRange = GetPercent(counterRange[i], expectedMedian);
Console.WriteLine($"{counterNaive[i]} ({devNaive:0.000})\t{counterRange[i]} ({devRange:0.000})");
Assert.That(devNaive, Is.LessThan(expectedDeviation), $"Naive dice face {i + 1}");
Assert.That(devRange, Is.LessThan(expectedDeviation), $"Range dice face {i + 1}");
}
});
}
private static double GetPercent(int actual, double expected)
=> Math.Abs(actual - expected) / expected * 100.0;
}