mirror of
https://github.com/RPCS3/discord-bot.git
synced 2026-01-31 01:25:22 +01:00
38 lines
1.3 KiB
C#
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;
|
|
} |