Refactored setting IRandom to distribution

This commit is contained in:
tsommer committed 2020-11-07 15:12:56 +01:00
1 parent c337fbeaae
commit 44abcc48b6
96 files changed
+664 -1437

No files matched your search

+10 -31
View File
@@ -1,3 +1,4 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
@@ -14,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaDistribution01()
{
var dist = new FastRng.Float.Distributions.BetaA2B2();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
var fqa = new Float.FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.0396f).Within(0.3f));
@@ -48,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.BetaA2B2();
var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -64,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.BetaA2B2();
var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.BetaA2B2 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -95,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.BetaA2B2();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.BetaA2B2(null));
}
}
}
+10 -31
View File
@@ -1,3 +1,4 @@
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Threading.Tasks;
@@ -14,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaDistribution01()
{
var dist = new FastRng.Float.Distributions.BetaA2B5();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
var fqa = new Float.FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.11719271f).Within(0.3f));
@@ -48,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.BetaA2B5();
var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -64,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.BetaA2B5();
var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.BetaA2B5 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -95,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.BetaA2B5();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.BetaA2B5(null));
}
}
}
+9 -31
View File
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaDistribution01()
{
var dist = new FastRng.Float.Distributions.BetaA5B2();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.0000001f).Within(0.0000003f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.BetaA5B2();
var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.BetaA5B2();
var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestBetaGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.BetaA5B2 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.BetaA5B2();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.BetaA5B2(null));
}
}
}
@@ -18,14 +18,13 @@ namespace FastRngTests.Float.Distributions
// The properties of the cauchy distribution cannot be tested by mean, media or variance,
// cf. https://en.wikipedia.org/wiki/Cauchy_distribution#Explanation_of_undefined_moments
var dist = new FastRng.Float.Distributions.CauchyLorentzX0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.976990739772031f).Within(0.06f));
@@ -52,13 +51,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestCauchyGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.CauchyLorentzX0();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -68,30 +66,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestCauchyGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.CauchyLorentzX0();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestCauchyGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -99,11 +79,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.CauchyLorentzX0();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.CauchyLorentzX0(null));
}
}
}
@@ -18,14 +18,13 @@ namespace FastRngTests.Float.Distributions
// The properties of the cauchy distribution cannot be tested by mean, media or variance,
// cf. https://en.wikipedia.org/wiki/Cauchy_distribution#Explanation_of_undefined_moments
var dist = new FastRng.Float.Distributions.CauchyLorentzX1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX1(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.009966272570142f).Within(0.003f));
@@ -52,13 +51,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestCauchyGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.CauchyLorentzX0();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -68,30 +66,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestCauchyGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.CauchyLorentzX0();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestCauchyGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.CauchyLorentzX0 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -99,11 +79,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.CauchyLorentzX1();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.CauchyLorentzX1(null));
}
}
}
@@ -15,17 +15,15 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareDistribution01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
{
var value = await rng.NextNumber(dist);
fqa.CountThis(value);
}
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
@@ -53,13 +51,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK1();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -69,13 +66,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.ChiSquareK1();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -83,28 +79,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange03()
public void NoRandomNumberGenerator01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK1 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK1();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.ChiSquareK1(null));
}
}
}
@@ -15,17 +15,15 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareDistribution01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK10();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
{
var value = await rng.NextNumber(dist);
fqa.CountThis(value);
}
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
@@ -53,13 +51,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK10();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -69,30 +66,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.ChiSquareK10();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK10 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -100,11 +79,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK10();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.ChiSquareK10(null));
}
}
}
@@ -15,15 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareDistribution01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK4();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.016417705906679f).Within(0.02f));
@@ -50,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK4();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -66,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.ChiSquareK4();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestChiSquareGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ChiSquareK4 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -97,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.ChiSquareK4();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.ChiSquareK4(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialDistribution01()
{
var dist = new FastRng.Float.Distributions.ExponentialLa10();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(1.00075018434777f).Within(0.05f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.ExponentialLa10();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,28 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.ExponentialLa10();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa10 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -94,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.ExponentialLa10();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.ExponentialLa10(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialDistribution01()
{
var dist = new FastRng.Float.Distributions.ExponentialLa5();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(1.0002177398625f).Within(0.05f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.ExponentialLa5();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,28 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.ExponentialLa5();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.ExponentialLa5 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -94,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.ExponentialLa5();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.ExponentialLa5(null));
}
}
}
+8 -30
View File
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestGammaDistribution01()
{
var dist = new FastRng.Float.Distributions.GammaA5B15();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.0000929594237282f).Within(0.0008f));
@@ -44,35 +43,17 @@ namespace FastRngTests.Float.Distributions
Assert.That(result[99], Is.EqualTo(0.0033038503429554f).Within(0.008f));
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestGammaGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.GammaA5B15 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestGammaGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.GammaA5B15();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -82,13 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestGammaGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.GammaA5B15();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.GammaA5B15();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.GammaA5B15(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialDistribution01()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa10();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.0000501746820562f).Within(0.0003f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa10();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,28 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa10();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa10 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -94,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa10();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.InverseExponentialLa10(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialDistribution01()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa5();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
var fqa = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fqa.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.007083408929052f).Within(0.008f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange01()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa5();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,28 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange02()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa5();
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
public async Task TestExponentialGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseExponentialLa5 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -94,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.InverseExponentialLa5();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.InverseExponentialLa5(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestInverseGammaDistribution01()
{
var dist = new FastRng.Float.Distributions.InverseGammaA3B05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.0000000000000003f).Within(0.0000001f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestInverseGammaGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseGammaA3B05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestInverseGammaGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseGammaA3B05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestInverseGammaGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.InverseGammaA3B05 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.InverseGammaA3B05();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.InverseGammaA3B05(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceDistribution01()
{
var dist = new FastRng.Float.Distributions.LaplaceB01M0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(1.0000000000000000f).Within(0.05f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M0 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.LaplaceB01M0();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.LaplaceB01M0(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceDistribution01()
{
var dist = new FastRng.Float.Distributions.LaplaceB01M05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.0074465830709244f).Within(0.004f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestLaplaceGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LaplaceB01M05 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.LaplaceB01M05();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.LaplaceB01M05(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLogNormalDistribution01()
{
var dist = new FastRng.Float.Distributions.LogNormalS1M0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(0.001505531f).Within(0.003f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLogNormalGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LogNormalS1M0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestLogNormalGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LogNormalS1M0();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestLogNormalGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.LogNormalS1M0 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.LogNormalS1M0();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.LogNormalS1M0(null));
}
}
}
@@ -17,11 +17,11 @@ namespace FastRngTests.Float.Distributions
{
const float MEAN = 0.5f;
const float STANDARD_DEVIATION = 0.2f;
var dist = new FastRng.Float.Distributions.NormalS02M05();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
var stats = new RunningStatistics();
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
{
@@ -30,7 +30,6 @@ namespace FastRngTests.Float.Distributions
fra.CountThis(nextNumber);
}
rng.StopProducer();
fra.NormalizeAndPlotEvents(TestContext.WriteLine);
TestContext.WriteLine($"mean={MEAN} vs. {stats.Mean}");
@@ -45,13 +44,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestNormalGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.NormalS02M05();
var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -61,30 +59,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestNormalGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.NormalS02M05();
var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestNormalGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.NormalS02M05 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -92,11 +72,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.NormalS02M05();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.NormalS02M05(null));
}
}
}
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestStudentTDistribution01()
{
var dist = new FastRng.Float.Distributions.StudentTNu1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(1.000000000f).Within(0.2f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestStudentTGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.StudentTNu1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestStudentTGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.StudentTNu1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestStudentTGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.StudentTNu1 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.StudentTNu1();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.StudentTNu1(null));
}
}
}
+27 -39
View File
@@ -10,8 +10,6 @@ namespace FastRngTests.Float.Distributions
[ExcludeFromCodeCoverage]
public class Uniform
{
private readonly IRandom rng = new MultiThreadedRng();
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
@@ -21,10 +19,10 @@ namespace FastRngTests.Float.Distributions
const float B = 1.0f;
const float MEAN = 0.5f * (A + B);
const float VARIANCE = (1.0f / 12.0f) * (B - A) * (B - A);
using var rng = new MultiThreadedRng();
var stats = new RunningStatistics();
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
{
@@ -33,7 +31,6 @@ namespace FastRngTests.Float.Distributions
fra.CountThis(value);
}
rng.StopProducer();
fra.NormalizeAndPlotEvents(TestContext.WriteLine);
fra.PlotOccurence(TestContext.WriteLine);
TestContext.WriteLine($"mean={MEAN} vs. {stats.Mean}");
@@ -61,13 +58,12 @@ namespace FastRngTests.Float.Distributions
const float P_HIGH = 1.0f - 0.25f * FAILURE_PROBABILITY;
var samples = new float[NUM_ROUNDS];
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
int n;
for (n = 0; n != NUM_ROUNDS; ++n)
samples[n] = await rng.GetUniform();
rng.StopProducer();
Array.Sort(samples);
var jMinus = 0;
@@ -119,12 +115,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestUniformGeneratorWithRange01()
{
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.Uniform();
var dist = new FastRng.Float.Distributions.Uniform(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -134,43 +130,26 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestUniformGeneratorWithRange02()
{
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
var dist = new FastRng.Float.Distributions.Uniform();
var dist = new FastRng.Float.Distributions.Uniform(rng);
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestUniformGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestUniformGeneratorWithRange04()
{
var rng = new MultiThreadedRng();
using var rng = new MultiThreadedRng();
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.GetUniform();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -180,7 +159,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestRange05Uint()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
@@ -195,7 +175,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestRange05Ulong()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
@@ -210,7 +191,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestRange05Float()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
@@ -224,7 +206,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestDistribution001Uint()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
@@ -237,7 +220,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestDistribution001Ulong()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
@@ -250,7 +234,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestDistribution001Float()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 1_000_000;
for (var n = 0; n < runs; n++)
@@ -263,7 +248,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.LONG_RUNNING)]
public async Task TestDistribution002Uint()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 100_000_000;
for (var n = 0; n < runs; n++)
@@ -276,7 +262,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.LONG_RUNNING)]
public async Task TestDistribution002Ulong()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 100_000_000;
for (var n = 0; n < runs; n++)
@@ -289,7 +276,8 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.LONG_RUNNING)]
public async Task TestDistribution002Float()
{
var dist = new FastRng.Float.Distributions.Uniform();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.Uniform(rng);
var distribution = new uint[101];
var runs = 100_000_000;
for (var n = 0; n < runs; n++)
@@ -15,14 +15,13 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestWeibullDistribution01()
{
var dist = new FastRng.Float.Distributions.WeibullK05La1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
var fra = new FrequencyAnalysis();
var rng = new MultiThreadedRng();
for (var n = 0; n < 100_000; n++)
fra.CountThis(await rng.NextNumber(dist));
rng.StopProducer();
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
Assert.That(result[0], Is.EqualTo(1.000000000f).Within(0.2f));
@@ -49,13 +48,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestWeibullGeneratorWithRange01()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.WeibullK05La1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
}
@@ -65,30 +63,12 @@ namespace FastRngTests.Float.Distributions
[Category(TestCategories.NORMAL)]
public async Task TestWeibullGeneratorWithRange02()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.WeibullK05La1();
using var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task TestWeibullGeneratorWithRange03()
{
var rng = new MultiThreadedRng();
var dist = new FastRng.Float.Distributions.WeibullK05La1 { Random = rng }; // Test default parameters
var samples = new float[1_000];
for (var n = 0; n < samples.Length; n++)
samples[n] = await dist.GetDistributedValue();
rng.StopProducer();
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
}
@@ -96,11 +76,9 @@ namespace FastRngTests.Float.Distributions
[Test]
[Category(TestCategories.COVER)]
[Category(TestCategories.NORMAL)]
public async Task NoRandomNumberGenerator01()
public void NoRandomNumberGenerator01()
{
var dist = new FastRng.Float.Distributions.WeibullK05La1();
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
Assert.That(await dist.GetDistributedValue(), Is.NaN);
Assert.Throws<ArgumentNullException>(() => new FastRng.Float.Distributions.WeibullK05La1(null));
}
}
}