2020-11-01 09:52:42 +00:00
|
|
|
using System;
|
|
|
|
using System.Diagnostics.CodeAnalysis;
|
|
|
|
using System.Threading;
|
|
|
|
using System.Threading.Tasks;
|
2023-07-06 08:08:46 +00:00
|
|
|
using FastRng;
|
|
|
|
using FastRng.Distributions;
|
2020-11-01 09:52:42 +00:00
|
|
|
using NUnit.Framework;
|
|
|
|
|
2023-07-06 08:08:46 +00:00
|
|
|
namespace FastRngTests
|
2020-11-01 09:52:42 +00:00
|
|
|
{
|
|
|
|
[ExcludeFromCodeCoverage]
|
|
|
|
public class MultiThreadedRngTests
|
|
|
|
{
|
|
|
|
private readonly IRandom rng = new MultiThreadedRng();
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange01Uint()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-01 09:52:42 +00:00
|
|
|
for (uint n = 0; n < 1_000_000; n++)
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange01Ulong()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-01 09:52:42 +00:00
|
|
|
for (ulong n = 0; n < 1_000_000; n++)
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange01Float()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-01 09:52:42 +00:00
|
|
|
for (var n = 0.0f; n < 1e6f; n++)
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange02Uint()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(5, 5), Is.EqualTo(5));
|
|
|
|
Assert.That(await dist.NextNumber(0, 0), Is.EqualTo(0));
|
|
|
|
Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_000), Is.EqualTo(3_000_000_000));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange02Ulong()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(5UL, 5), Is.EqualTo(5));
|
|
|
|
Assert.That(await dist.NextNumber(0UL, 0), Is.EqualTo(0));
|
|
|
|
Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_000), Is.EqualTo(3_000_000_000));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange02Float()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(5f, 5f), Is.EqualTo(5));
|
|
|
|
Assert.That(await dist.NextNumber(0f, 0f), Is.EqualTo(0));
|
|
|
|
Assert.That(await dist.NextNumber(3e9f, 3e9f), Is.EqualTo(3e9f));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange03Uint()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(5, 6), Is.InRange(5, 6));
|
|
|
|
Assert.That(await dist.NextNumber(0, 1), Is.InRange(0, 1));
|
|
|
|
Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange03Ulong()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(5UL, 6), Is.InRange(5, 6));
|
|
|
|
Assert.That(await dist.NextNumber(0UL, 1), Is.InRange(0, 1));
|
|
|
|
Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange03Float()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(5f, 6f), Is.InRange(5f, 6f));
|
|
|
|
Assert.That(await dist.NextNumber(0f, 1f), Is.InRange(0f, 1f));
|
|
|
|
Assert.That(await dist.NextNumber(3e9f, 3e9f+2f), Is.InRange(3e9f, 3e9f+2f));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange04Uint()
|
|
|
|
{
|
2020-11-07 21:43:43 +00:00
|
|
|
var distUniform = new Uniform(this.rng);
|
|
|
|
var distNormal = new NormalS02M05(this.rng);
|
|
|
|
|
|
|
|
Assert.That(await distUniform.NextNumber(10, 1), Is.InRange(1, 10));
|
|
|
|
Assert.That(await distNormal.NextNumber(10, 1), Is.InRange(1, 10));
|
|
|
|
|
|
|
|
Assert.That(await distUniform.NextNumber(20, 1), Is.InRange(1, 20));
|
|
|
|
Assert.That(await distNormal.NextNumber(20, 1), Is.InRange(1, 20));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange04Ulong()
|
|
|
|
{
|
2020-11-07 21:43:43 +00:00
|
|
|
var distUniform = new Uniform(this.rng);
|
|
|
|
var distNormal = new NormalS02M05(this.rng);
|
|
|
|
|
|
|
|
Assert.That(await distUniform.NextNumber(10UL, 1), Is.InRange(1, 10));
|
|
|
|
Assert.That(await distNormal.NextNumber(10UL, 1), Is.InRange(1, 10));
|
|
|
|
|
|
|
|
Assert.That(await distUniform.NextNumber(20UL, 1), Is.InRange(1, 20));
|
|
|
|
Assert.That(await distNormal.NextNumber(20UL, 1), Is.InRange(1, 20));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestRange04Float()
|
|
|
|
{
|
2020-11-07 21:43:43 +00:00
|
|
|
var distUniform = new Uniform(this.rng);
|
|
|
|
var distNormal = new NormalS02M05(this.rng);
|
|
|
|
|
|
|
|
Assert.That(await distUniform.NextNumber(10.0f, 1), Is.InRange(1, 10));
|
|
|
|
Assert.That(await distNormal.NextNumber(10.0f, 1), Is.InRange(1, 10));
|
|
|
|
|
|
|
|
Assert.That(await distUniform.NextNumber(20.0f, 1), Is.InRange(1, 20));
|
|
|
|
Assert.That(await distNormal.NextNumber(20.0f, 1), Is.InRange(1, 20));
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
2020-11-08 15:23:55 +00:00
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.LONG_RUNNING)]
|
|
|
|
public async Task TestRange05()
|
|
|
|
{
|
|
|
|
var distUniform = new Uniform(this.rng);
|
|
|
|
var distLorentz = new CauchyLorentzX1(this.rng);
|
|
|
|
|
|
|
|
var rngContains0 = false;
|
|
|
|
var rngContains1 = false;
|
|
|
|
|
|
|
|
var uniformContains0 = false;
|
|
|
|
var uniformContains1 = false;
|
|
|
|
|
|
|
|
var lorentzContains0 = false;
|
|
|
|
var lorentzContains1 = false;
|
|
|
|
|
|
|
|
for (int i = 0; i < 100_000_000; i++)
|
|
|
|
{
|
2023-07-06 08:08:46 +00:00
|
|
|
var rngValue = await this.rng.GetUniform();
|
2020-11-08 15:23:55 +00:00
|
|
|
var uniform = await distUniform.NextNumber();
|
|
|
|
var lorentz = await distLorentz.NextNumber();
|
|
|
|
|
|
|
|
switch (rngValue)
|
|
|
|
{
|
|
|
|
case 0.0f:
|
|
|
|
rngContains0 = true;
|
|
|
|
break;
|
|
|
|
case 1.0f:
|
|
|
|
rngContains1 = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (uniform)
|
|
|
|
{
|
|
|
|
case 0.0f:
|
|
|
|
uniformContains0 = true;
|
|
|
|
break;
|
|
|
|
case 1.0f:
|
|
|
|
uniformContains1 = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (lorentz)
|
|
|
|
{
|
|
|
|
case 0.0f:
|
|
|
|
lorentzContains0 = true;
|
|
|
|
break;
|
|
|
|
case 1.0f:
|
|
|
|
lorentzContains1 = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
TestContext.WriteLine($"Uniform generator contained 0? {rngContains0} (expected=false)");
|
|
|
|
TestContext.WriteLine($"Uniform generator contained 1? {rngContains1} (expected=true)");
|
|
|
|
TestContext.WriteLine($"Uniform distribution contained 0? {uniformContains0} (expected=false)");
|
|
|
|
TestContext.WriteLine($"Uniform distribution contained 1? {uniformContains1} (expected=true)");
|
|
|
|
TestContext.WriteLine($"Lorentz distribution contained 0? {lorentzContains0} (expected=false)");
|
|
|
|
TestContext.WriteLine($"Lorentz distribution contained 1? {lorentzContains1} (expected=true)");
|
|
|
|
|
|
|
|
Assert.That(rngContains0, Is.False, "Uniform generator contained 0");
|
|
|
|
Assert.That(rngContains1, Is.True, "Uniform generator does not contained 1");
|
|
|
|
|
|
|
|
Assert.That(uniformContains0, Is.False, "Uniform distribution contained 0");
|
|
|
|
Assert.That(uniformContains1, Is.True, "Uniform distribution does not contained 1");
|
|
|
|
|
|
|
|
Assert.That(lorentzContains0, Is.False, "Lorentz distribution contained 0");
|
|
|
|
Assert.That(lorentzContains1, Is.True, "Lorentz distribution does not contained 1");
|
|
|
|
}
|
2020-11-01 09:52:42 +00:00
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestStoppingProducers01()
|
|
|
|
{
|
2020-11-07 14:46:00 +00:00
|
|
|
var rng2 = new MultiThreadedRng();
|
|
|
|
rng2.Dispose();
|
2020-11-01 09:52:42 +00:00
|
|
|
|
|
|
|
var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
|
|
|
|
var wasCanceled = false;
|
|
|
|
|
|
|
|
while(true)
|
|
|
|
{
|
|
|
|
var tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
2020-11-07 14:12:56 +00:00
|
|
|
await rng2.GetUniform(tokenSource.Token);
|
2020-11-01 09:52:42 +00:00
|
|
|
if (tokenSource.IsCancellationRequested)
|
|
|
|
{
|
|
|
|
wasCanceled = true;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (masterToken.IsCancellationRequested)
|
|
|
|
{
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Assert.That(masterToken.IsCancellationRequested, Is.False, "Master token was used to stop test");
|
|
|
|
Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
|
|
|
|
|
|
|
|
var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
2020-11-07 14:46:00 +00:00
|
|
|
await new NormalS02M05(rng2).NextNumber(tokenSource2.Token);
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
|
|
|
|
|
|
|
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
2020-11-07 14:46:00 +00:00
|
|
|
await new NormalS02M05(rng2).NextNumber(-1f, 1f, tokenSource2.Token);
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
|
|
|
|
|
|
|
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
2020-11-07 14:46:00 +00:00
|
|
|
await new NormalS02M05(rng2).NextNumber(0u, 6u, tokenSource2.Token);
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
|
|
|
|
|
|
|
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
2020-11-07 14:46:00 +00:00
|
|
|
await new NormalS02M05(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task OneSeed01()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
using var rng1 = new MultiThreadedRng(6);
|
|
|
|
using var rng2 = new MultiThreadedRng(6);
|
|
|
|
using var rng3 = new MultiThreadedRng(7);
|
2020-11-01 09:52:42 +00:00
|
|
|
|
|
|
|
var rng1Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng1Sample.Length; n++)
|
|
|
|
rng1Sample[n] = await rng1.GetUniform();
|
|
|
|
|
|
|
|
var rng2Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng2Sample.Length; n++)
|
|
|
|
rng2Sample[n] = await rng2.GetUniform();
|
|
|
|
|
|
|
|
var rng3Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng3Sample.Length; n++)
|
|
|
|
rng3Sample[n] = await rng3.GetUniform();
|
2020-11-07 14:12:56 +00:00
|
|
|
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
|
|
|
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
|
|
|
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TwoSeeds01()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
using var rng1 = new MultiThreadedRng(3, 6);
|
|
|
|
using var rng2 = new MultiThreadedRng(3, 6);
|
|
|
|
using var rng3 = new MultiThreadedRng(3, 7);
|
|
|
|
using var rng4 = new MultiThreadedRng(6, 3);
|
2020-11-01 09:52:42 +00:00
|
|
|
|
|
|
|
var rng1Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng1Sample.Length; n++)
|
|
|
|
rng1Sample[n] = await rng1.GetUniform();
|
|
|
|
|
|
|
|
var rng2Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng2Sample.Length; n++)
|
|
|
|
rng2Sample[n] = await rng2.GetUniform();
|
|
|
|
|
|
|
|
var rng3Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng3Sample.Length; n++)
|
|
|
|
rng3Sample[n] = await rng3.GetUniform();
|
|
|
|
|
|
|
|
var rng4Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng4Sample.Length; n++)
|
|
|
|
rng4Sample[n] = await rng4.GetUniform();
|
2020-11-07 14:12:56 +00:00
|
|
|
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
|
|
|
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
|
|
|
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng4Sample));
|
|
|
|
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
|
|
|
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng4Sample));
|
|
|
|
Assert.That(rng3Sample, Is.Not.EquivalentTo(rng4Sample));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task NoSeed01()
|
|
|
|
{
|
2020-11-07 14:12:56 +00:00
|
|
|
using var rng1 = new MultiThreadedRng();
|
|
|
|
using var rng2 = new MultiThreadedRng();
|
|
|
|
using var rng3 = new MultiThreadedRng();
|
2020-11-01 09:52:42 +00:00
|
|
|
|
|
|
|
var rng1Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng1Sample.Length; n++)
|
|
|
|
rng1Sample[n] = await rng1.GetUniform();
|
|
|
|
|
|
|
|
var rng2Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng2Sample.Length; n++)
|
|
|
|
rng2Sample[n] = await rng2.GetUniform();
|
|
|
|
|
|
|
|
var rng3Sample = new float[10];
|
|
|
|
for (var n = 0; n < rng3Sample.Length; n++)
|
|
|
|
rng3Sample[n] = await rng3.GetUniform();
|
2020-11-07 14:12:56 +00:00
|
|
|
|
2020-11-01 09:52:42 +00:00
|
|
|
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng2Sample));
|
|
|
|
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
|
|
|
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
|
|
|
}
|
2020-11-07 11:40:50 +00:00
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestCancellation01()
|
|
|
|
{
|
|
|
|
var tokenSource = new CancellationTokenSource();
|
|
|
|
var token = tokenSource.Token;
|
|
|
|
tokenSource.Cancel();
|
|
|
|
|
|
|
|
using var rng2 = new MultiThreadedRng();
|
2020-11-07 14:12:56 +00:00
|
|
|
var dist = new Uniform(this.rng);
|
2020-11-07 14:46:00 +00:00
|
|
|
Assert.That(await dist.NextNumber(1, 100_000, token), Is.EqualTo(0));
|
2020-11-07 11:40:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestCancellation02()
|
|
|
|
{
|
|
|
|
var tokenSource = new CancellationTokenSource();
|
|
|
|
var token = tokenSource.Token;
|
|
|
|
tokenSource.Cancel();
|
|
|
|
|
|
|
|
using var rng2 = new MultiThreadedRng();
|
|
|
|
Assert.That(await rng2.GetUniform(token), Is.NaN);
|
|
|
|
}
|
2020-11-08 10:57:21 +00:00
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestDeterministic01()
|
|
|
|
{
|
|
|
|
using var rng2 = new MultiThreadedRng(16);
|
|
|
|
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12712699).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.5764246).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.06033641).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.6822646).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.61201024).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.17746393).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.33456334).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.96167856).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12944269).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.64489424).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.109665975).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.18188846).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.36097932).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.48192585).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.1617974).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.24791045).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.43913218).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.3343723).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9428737).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55195147).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.027495692).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9621458).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55794334).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.69002056).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.86020225).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.88220626).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.68816894).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.8583311).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.003915685).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.83575225).Within(1e-7f));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestDeterministic02()
|
|
|
|
{
|
|
|
|
using var rng2 = new MultiThreadedRng(16);
|
|
|
|
var dist = new Uniform(rng2);
|
|
|
|
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(58));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(6));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(68));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(61));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(64));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(36));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(48));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(25));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(44));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(94));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(55));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(86));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(88));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(85));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(83));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestDeterministic03()
|
|
|
|
{
|
|
|
|
using var rng2 = new MultiThreadedRng(16);
|
|
|
|
var dist = new CauchyLorentzX0(rng2);
|
|
|
|
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(14));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(65));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(37));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(12));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(8));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(20));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(84));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestDeterministic01b()
|
|
|
|
{
|
|
|
|
using var rng2 = new MultiThreadedRng(16, 362_436_069);
|
|
|
|
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12712699).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.5764246).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.06033641).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.6822646).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.61201024).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.17746393).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.33456334).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.96167856).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12944269).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.64489424).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.109665975).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.18188846).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.36097932).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.48192585).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.1617974).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.24791045).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.43913218).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.3343723).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9428737).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55195147).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.027495692).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9621458).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55794334).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.69002056).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.86020225).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.88220626).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.68816894).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.8583311).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.003915685).Within(1e-7f));
|
|
|
|
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.83575225).Within(1e-7f));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestDeterministic02b()
|
|
|
|
{
|
|
|
|
using var rng2 = new MultiThreadedRng(16, 362_436_069);
|
|
|
|
var dist = new Uniform(rng2);
|
|
|
|
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(58));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(6));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(68));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(61));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(64));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(36));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(48));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(25));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(44));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(94));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(55));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(86));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(88));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(85));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(83));
|
|
|
|
}
|
|
|
|
|
|
|
|
[Test]
|
|
|
|
[Category(TestCategories.COVER)]
|
|
|
|
[Category(TestCategories.NORMAL)]
|
|
|
|
public async Task TestDeterministic03b()
|
|
|
|
{
|
|
|
|
using var rng2 = new MultiThreadedRng(16, 362_436_069);
|
|
|
|
var dist = new CauchyLorentzX0(rng2);
|
|
|
|
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(14));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(65));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(37));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(12));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(8));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(20));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(84));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
|
|
|
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
|
|
|
}
|
2020-11-01 09:52:42 +00:00
|
|
|
}
|
|
|
|
}
|