FastRng/FastRngTests/Double/MultiThreadedRngTests.cs

265 lines
9.7 KiB
C#
Raw Normal View History

2020-09-24 18:22:17 +00:00
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
2020-09-26 09:40:01 +00:00
using FastRng.Double;
using FastRng.Double.Distributions;
2020-09-24 18:22:17 +00:00
using NUnit.Framework;
2020-09-26 09:42:38 +00:00
namespace FastRngTests.Double
2020-09-24 18:22:17 +00:00
{
[ExcludeFromCodeCoverage]
public class MultiThreadedRngTests
{
private readonly IRandom rng = new MultiThreadedRng();
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange01Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
for (uint n = 0; n < 1_000_000; n++)
2020-09-25 22:05:41 +00:00
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange01Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
for (ulong n = 0; n < 1_000_000; n++)
2020-09-25 22:05:41 +00:00
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange01Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-26 10:51:49 +00:00
for (var n = 0.0; n < 1e6; n++)
2020-09-25 22:05:41 +00:00
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange02Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(5, 5, dist), Is.EqualTo(5));
Assert.That(await rng.NextNumber(0, 0, dist), Is.EqualTo(0));
Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange02Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(5UL, 5, dist), Is.EqualTo(5));
Assert.That(await rng.NextNumber(0UL, 0, dist), Is.EqualTo(0));
Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange02Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(5f, 5f, dist), Is.EqualTo(5));
Assert.That(await rng.NextNumber(0f, 0f, dist), Is.EqualTo(0));
2020-09-26 10:51:49 +00:00
Assert.That(await rng.NextNumber(3e9, 3e9, dist), Is.EqualTo(3e9));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange03Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(5, 6, dist), Is.InRange(5, 6));
Assert.That(await rng.NextNumber(0, 1, dist), Is.InRange(0, 1));
Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange03Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(5UL, 6, dist), Is.InRange(5, 6));
Assert.That(await rng.NextNumber(0UL, 1, dist), Is.InRange(0, 1));
Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange03Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(5f, 6, dist), Is.InRange(5, 6));
Assert.That(await rng.NextNumber(0f, 1, dist), Is.InRange(0, 1));
2020-09-26 10:51:49 +00:00
Assert.That(await rng.NextNumber(3e9, 3e9+2, dist), Is.InRange(3e9, 3e9+2));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange04Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(10, 1, dist), Is.InRange(1, 10));
Assert.That(await rng.NextNumber(20, 1, dist), Is.InRange(1, 20));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange04Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
Assert.That(await rng.NextNumber(10UL, 1, dist), Is.InRange(1, 10));
Assert.That(await rng.NextNumber(20UL, 1, dist), Is.InRange(1, 20));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange04Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-26 10:51:49 +00:00
Assert.That(await rng.NextNumber(10.0, 1, dist), Is.InRange(1, 10));
Assert.That(await rng.NextNumber(20.0, 1, dist), Is.InRange(1, 20));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange05Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
2020-09-25 22:05:41 +00:00
distribution[await rng.NextNumber(0, 100, dist)]++;
2020-09-24 18:22:17 +00:00
for (var n = 0; n < distribution.Length - 1; n++)
Assert.That(distribution[n], Is.GreaterThan(0));
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange05Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
2020-09-25 22:05:41 +00:00
distribution[await rng.NextNumber(0UL, 100, dist)]++;
2020-09-24 18:22:17 +00:00
for (var n = 0; n < distribution.Length - 1; n++)
Assert.That(distribution[n], Is.GreaterThan(0));
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestRange05Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
2020-09-26 10:51:49 +00:00
distribution[(uint)Math.Floor(await rng.NextNumber(0.0, 100.0, dist))]++;
2020-09-24 18:22:17 +00:00
for (var n = 0; n < distribution.Length - 1; n++)
Assert.That(distribution[n], Is.GreaterThan(0));
}
[Test]
[Category(TestCategories.NORMAL)]
public async Task TestDistribution001Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
2020-09-25 22:05:41 +00:00
distribution[await rng.NextNumber(0, 100, dist)]++;
2020-09-24 18:22:17 +00:00
2020-09-25 22:05:41 +00:00
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.NORMAL)]
public async Task TestDistribution001Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
2020-09-25 22:05:41 +00:00
distribution[await rng.NextNumber(0UL, 100, dist)]++;
2020-09-24 18:22:17 +00:00
2020-09-25 22:05:41 +00:00
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.NORMAL)]
public async Task TestDistribution001Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
2020-09-26 10:51:49 +00:00
distribution[(uint)Math.Floor(await rng.NextNumber(0.0, 100.0, dist))]++;
2020-09-24 18:22:17 +00:00
2020-09-25 22:05:41 +00:00
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.LONG_RUNNING)]
public async Task TestDistribution002Uint()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 100_000_000;
for (var n = 0; n < runs; n++)
2020-09-25 22:05:41 +00:00
distribution[await rng.NextNumber(0, 100, dist)]++;
2020-09-24 18:22:17 +00:00
2020-09-25 22:05:41 +00:00
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.LONG_RUNNING)]
public async Task TestDistribution002Ulong()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 100_000_000;
for (var n = 0; n < runs; n++)
2020-09-25 22:05:41 +00:00
distribution[await rng.NextNumber(0UL, 100, dist)]++;
2020-09-24 18:22:17 +00:00
2020-09-25 22:05:41 +00:00
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
2020-09-24 18:22:17 +00:00
}
[Test]
[Category(TestCategories.LONG_RUNNING)]
public async Task TestDistribution002Float()
{
2020-09-25 22:05:41 +00:00
var dist = new Uniform();
2020-09-24 18:22:17 +00:00
var distribution = new uint[101];
var runs = 100_000_000;
for (var n = 0; n < runs; n++)
2020-09-26 10:51:49 +00:00
distribution[(uint)Math.Floor(await rng.NextNumber(0.0, 100.0, dist))]++;
2020-09-24 18:22:17 +00:00
2020-09-25 22:05:41 +00:00
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
2020-09-24 18:22:17 +00:00
}
}
}