Refactored setting IRandom to distribution
This commit is contained in:
1 parent
c337fbeaae
commit
44abcc48b6
96 files changed
+664
-1437
No files matched your search
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2(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.0396).Within(0.3));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B2();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.BetaA2B2(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5(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.11719271).Within(0.3));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.BetaA2B5();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.BetaA2B5(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0000001).Within(0.0000003));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2();
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2();
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.BetaA5B2();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.BetaA5B2(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,15 +17,14 @@ namespace FastRngTests.Double.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.Double.Distributions.CauchyLorentzX0();
|
||||
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.976990739772031).Within(0.06));
|
||||
@@ -52,13 +51,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -68,30 +66,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -99,11 +79,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.CauchyLorentzX0(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -17,15 +17,14 @@ namespace FastRngTests.Double.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.Double.Distributions.CauchyLorentzX1();
|
||||
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.009966272570142).Within(0.003));
|
||||
@@ -52,13 +51,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -68,30 +66,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX0 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -99,11 +79,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.CauchyLorentzX1();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.CauchyLorentzX1(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,17 +15,15 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -69,13 +66,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -83,28 +79,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange03()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK1();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.ChiSquareK1(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,17 +15,15 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -69,30 +66,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -100,11 +79,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK10();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.ChiSquareK10(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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);
|
||||
|
||||
@@ -50,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -66,13 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -80,28 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange03()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ChiSquareK4();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.ChiSquareK4(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.00075018434777).Within(0.05));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,28 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -94,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa10();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.ExponentialLa10(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0002177398625).Within(0.05));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,28 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -94,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.ExponentialLa5();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.ExponentialLa5(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0000929594237282).Within(0.0008));
|
||||
@@ -44,35 +43,17 @@ namespace FastRngTests.Double.Distributions
|
||||
Assert.That(result[99], Is.EqualTo(0.0033038503429554).Within(0.008));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -82,13 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.GammaA5B15();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.GammaA5B15(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0000501746820562).Within(0.0003));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,28 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -94,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa10();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.InverseExponentialLa10(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.007083408929052).Within(0.008));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,28 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test] [Category(TestCategories.COVER)] [Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -94,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseExponentialLa5();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.InverseExponentialLa5(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0000000000000003).Within(0.0000001));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,13 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -79,28 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange03()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.InverseGammaA3B05();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.InverseGammaA3B05(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0000000000000000).Within(0.05));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M0();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.LaplaceB01M0(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.0074465830709244).Within(0.004));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.LaplaceB01M05();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.LaplaceB01M05(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.001505531).Within(0.003));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.LogNormalS1M0();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.LogNormalS1M0(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,10 @@ namespace FastRngTests.Double.Distributions
|
||||
const double MEAN = 0.5;
|
||||
const double STANDARD_DEVIATION = 0.2;
|
||||
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
fra.CountThis(nextNumber);
|
||||
}
|
||||
|
||||
rng.StopProducer();
|
||||
fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
TestContext.WriteLine($"mean={MEAN} vs. {stats.Mean}");
|
||||
@@ -45,13 +44,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05();
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -61,30 +59,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05();
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -92,11 +72,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.NormalS02M05();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.NormalS02M05(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.000000000).Within(0.2));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.StudentTNu1();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.StudentTNu1(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,6 @@ namespace FastRngTests.Double.Distributions
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class Uniform
|
||||
{
|
||||
private readonly IRandom rng = new MultiThreadedRng();
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
@@ -24,7 +22,7 @@ namespace FastRngTests.Double.Distributions
|
||||
|
||||
var stats = new RunningStatistics();
|
||||
var fra = new FrequencyAnalysis();
|
||||
var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
{
|
||||
@@ -33,7 +31,6 @@ namespace FastRngTests.Double.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.Double.Distributions
|
||||
const double P_HIGH = 1.0 - 0.25 * FAILURE_PROBABILITY;
|
||||
|
||||
var samples = new double[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;
|
||||
@@ -120,11 +116,11 @@ namespace FastRngTests.Double.Distributions
|
||||
public async Task TestUniformGeneratorWithRange01()
|
||||
{
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.Uniform(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -135,42 +131,25 @@ namespace FastRngTests.Double.Distributions
|
||||
public async Task TestUniformGeneratorWithRange02()
|
||||
{
|
||||
var samples = new double[1_000];
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.Uniform(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.Uniform { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "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 double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.GetUniform();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -180,7 +159,8 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Uint()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Ulong()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Float()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Uint()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Ulong()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Float()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Uint()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Ulong()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Float()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.Uniform();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullDistribution01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.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.000000000).Within(0.2));
|
||||
@@ -49,13 +48,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
|
||||
}
|
||||
@@ -65,30 +63,12 @@ namespace FastRngTests.Double.Distributions
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange02()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1();
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1(rng);
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.NextNumber(0.0, 1.0, dist);
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange03()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1 { Random = rng }; // Test default parameters
|
||||
|
||||
var samples = new double[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.GetDistributedValue();
|
||||
|
||||
rng.StopProducer();
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
|
||||
}
|
||||
@@ -96,11 +76,9 @@ namespace FastRngTests.Double.Distributions
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoRandomNumberGenerator01()
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
var dist = new FastRng.Double.Distributions.WeibullK05La1();
|
||||
Assert.DoesNotThrowAsync(async () => await dist.GetDistributedValue());
|
||||
Assert.That(await dist.GetDistributedValue(), Is.NaN);
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Double.Distributions.WeibullK05La1(null));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
for (uint n = 0; n < 1_000_000; n++)
|
||||
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -28,7 +28,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
for (ulong n = 0; n < 1_000_000; n++)
|
||||
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -38,7 +38,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
for (var n = 0.0; n < 1e6; n++)
|
||||
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -48,7 +48,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5, 5, dist), Is.EqualTo(5));
|
||||
Assert.That(await rng.NextNumber(0, 0, dist), Is.EqualTo(0));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
|
||||
@@ -59,7 +59,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5UL, 5, dist), Is.EqualTo(5));
|
||||
Assert.That(await rng.NextNumber(0UL, 0, dist), Is.EqualTo(0));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
|
||||
@@ -70,7 +70,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5f, 5f, dist), Is.EqualTo(5));
|
||||
Assert.That(await rng.NextNumber(0f, 0f, dist), Is.EqualTo(0));
|
||||
Assert.That(await rng.NextNumber(3e9, 3e9, dist), Is.EqualTo(3e9));
|
||||
@@ -81,7 +81,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5, 6, dist), Is.InRange(5, 6));
|
||||
Assert.That(await rng.NextNumber(0, 1, dist), Is.InRange(0, 1));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
@@ -92,7 +92,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5UL, 6, dist), Is.InRange(5, 6));
|
||||
Assert.That(await rng.NextNumber(0UL, 1, dist), Is.InRange(0, 1));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
@@ -103,7 +103,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5f, 6, dist), Is.InRange(5, 6));
|
||||
Assert.That(await rng.NextNumber(0f, 1, dist), Is.InRange(0, 1));
|
||||
Assert.That(await rng.NextNumber(3e9, 3e9+2, dist), Is.InRange(3e9, 3e9+2));
|
||||
@@ -114,7 +114,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(10, 1, dist), Is.InRange(1, 10));
|
||||
Assert.That(await rng.NextNumber(20, 1, dist), Is.InRange(1, 20));
|
||||
}
|
||||
@@ -124,7 +124,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(10UL, 1, dist), Is.InRange(1, 10));
|
||||
Assert.That(await rng.NextNumber(20UL, 1, dist), Is.InRange(1, 20));
|
||||
}
|
||||
@@ -134,7 +134,7 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(10.0, 1, dist), Is.InRange(1, 10));
|
||||
Assert.That(await rng.NextNumber(20.0, 1, dist), Is.InRange(1, 20));
|
||||
}
|
||||
@@ -144,8 +144,8 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStoppingProducers01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
rng.StopProducer();
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
rng2.StopProducer();
|
||||
|
||||
var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
|
||||
var wasCanceled = false;
|
||||
@@ -153,7 +153,7 @@ namespace FastRngTests.Double
|
||||
while(true)
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.GetUniform(tokenSource.Token);
|
||||
await rng2.GetUniform(tokenSource.Token);
|
||||
if (tokenSource.IsCancellationRequested)
|
||||
{
|
||||
wasCanceled = true;
|
||||
@@ -170,19 +170,19 @@ namespace FastRngTests.Double
|
||||
Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
|
||||
|
||||
var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(-1d, 1d, new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(-1d, 1d, new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(0u, 6u, new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(0u, 6u, new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(0ul, 6ul, new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(0ul, 6ul, new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
}
|
||||
|
||||
@@ -191,9 +191,9 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task OneSeed01()
|
||||
{
|
||||
var rng1 = new MultiThreadedRng(6);
|
||||
var rng2 = new MultiThreadedRng(6);
|
||||
var rng3 = new MultiThreadedRng(7);
|
||||
using var rng1 = new MultiThreadedRng(6);
|
||||
using var rng2 = new MultiThreadedRng(6);
|
||||
using var rng3 = new MultiThreadedRng(7);
|
||||
|
||||
var rng1Sample = new double[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -206,11 +206,7 @@ namespace FastRngTests.Double
|
||||
var rng3Sample = new double[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
|
||||
rng1.StopProducer();
|
||||
rng2.StopProducer();
|
||||
rng3.StopProducer();
|
||||
|
||||
|
||||
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@@ -221,10 +217,10 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TwoSeeds01()
|
||||
{
|
||||
var rng1 = new MultiThreadedRng(3, 6);
|
||||
var rng2 = new MultiThreadedRng(3, 6);
|
||||
var rng3 = new MultiThreadedRng(3, 7);
|
||||
var rng4 = new MultiThreadedRng(6, 3);
|
||||
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);
|
||||
|
||||
var rng1Sample = new double[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -241,12 +237,7 @@ namespace FastRngTests.Double
|
||||
var rng4Sample = new double[10];
|
||||
for (var n = 0; n < rng4Sample.Length; n++)
|
||||
rng4Sample[n] = await rng4.GetUniform();
|
||||
|
||||
rng1.StopProducer();
|
||||
rng2.StopProducer();
|
||||
rng3.StopProducer();
|
||||
rng4.StopProducer();
|
||||
|
||||
|
||||
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng4Sample));
|
||||
@@ -260,9 +251,9 @@ namespace FastRngTests.Double
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoSeed01()
|
||||
{
|
||||
var rng1 = new MultiThreadedRng();
|
||||
var rng2 = new MultiThreadedRng();
|
||||
var rng3 = new MultiThreadedRng();
|
||||
using var rng1 = new MultiThreadedRng();
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
using var rng3 = new MultiThreadedRng();
|
||||
|
||||
var rng1Sample = new double[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -275,11 +266,7 @@ namespace FastRngTests.Double
|
||||
var rng3Sample = new double[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
|
||||
rng1.StopProducer();
|
||||
rng2.StopProducer();
|
||||
rng3.StopProducer();
|
||||
|
||||
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@@ -295,7 +282,7 @@ namespace FastRngTests.Double
|
||||
tokenSource.Cancel();
|
||||
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(rng2);
|
||||
Assert.That(await rng2.NextNumber(1, 100_000, dist, token), Is.EqualTo(0));
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace FastRngTests.Double
|
||||
public async Task Generate1MNormal()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new NormalS02M05();
|
||||
var dist = new NormalS02M05(rng);
|
||||
var data = new double[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
@@ -49,7 +49,6 @@ namespace FastRngTests.Double
|
||||
data[n] = await rng.NextNumber(dist);
|
||||
|
||||
stopwatch.Stop();
|
||||
rng.StopProducer();
|
||||
|
||||
TestContext.WriteLine($"Generated 1M normal distributed random numbers in {stopwatch.Elapsed.Minutes} minute(s), {stopwatch.Elapsed.Seconds} second(s), and {stopwatch.Elapsed.Milliseconds} milliseconds.");
|
||||
}
|
||||
@@ -59,7 +58,7 @@ namespace FastRngTests.Double
|
||||
public async Task Generate1MChiSquare()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new ChiSquareK4();
|
||||
var dist = new ChiSquareK4(rng);
|
||||
var data = new double[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -18,7 +18,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
for (uint n = 0; n < 1_000_000; n++)
|
||||
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -28,7 +28,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
for (ulong n = 0; n < 1_000_000; n++)
|
||||
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -38,7 +38,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
for (var n = 0.0f; n < 1e6f; n++)
|
||||
Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -48,7 +48,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5, 5, dist), Is.EqualTo(5));
|
||||
Assert.That(await rng.NextNumber(0, 0, dist), Is.EqualTo(0));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
|
||||
@@ -59,7 +59,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5UL, 5, dist), Is.EqualTo(5));
|
||||
Assert.That(await rng.NextNumber(0UL, 0, dist), Is.EqualTo(0));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
|
||||
@@ -70,7 +70,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5f, 5f, dist), Is.EqualTo(5));
|
||||
Assert.That(await rng.NextNumber(0f, 0f, dist), Is.EqualTo(0));
|
||||
Assert.That(await rng.NextNumber(3e9f, 3e9f, dist), Is.EqualTo(3e9f));
|
||||
@@ -81,7 +81,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5, 6, dist), Is.InRange(5, 6));
|
||||
Assert.That(await rng.NextNumber(0, 1, dist), Is.InRange(0, 1));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
@@ -92,7 +92,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5UL, 6, dist), Is.InRange(5, 6));
|
||||
Assert.That(await rng.NextNumber(0UL, 1, dist), Is.InRange(0, 1));
|
||||
Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
@@ -103,7 +103,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(5f, 6f, dist), Is.InRange(5f, 6f));
|
||||
Assert.That(await rng.NextNumber(0f, 1f, dist), Is.InRange(0f, 1f));
|
||||
Assert.That(await rng.NextNumber(3e9f, 3e9f+2f, dist), Is.InRange(3e9f, 3e9f+2f));
|
||||
@@ -114,7 +114,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Uint()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(10, 1, dist), Is.InRange(1, 10));
|
||||
Assert.That(await rng.NextNumber(20, 1, dist), Is.InRange(1, 20));
|
||||
}
|
||||
@@ -124,7 +124,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Ulong()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(10UL, 1, dist), Is.InRange(1, 10));
|
||||
Assert.That(await rng.NextNumber(20UL, 1, dist), Is.InRange(1, 20));
|
||||
}
|
||||
@@ -134,7 +134,7 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Float()
|
||||
{
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng.NextNumber(10.0f, 1f, dist), Is.InRange(1f, 10f));
|
||||
Assert.That(await rng.NextNumber(20.0f, 1f, dist), Is.InRange(1f, 20f));
|
||||
}
|
||||
@@ -144,8 +144,8 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStoppingProducers01()
|
||||
{
|
||||
var rng = new MultiThreadedRng();
|
||||
rng.StopProducer();
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
rng2.StopProducer();
|
||||
|
||||
var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
|
||||
var wasCanceled = false;
|
||||
@@ -153,7 +153,7 @@ namespace FastRngTests.Float
|
||||
while(true)
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.GetUniform(tokenSource.Token);
|
||||
await rng2.GetUniform(tokenSource.Token);
|
||||
if (tokenSource.IsCancellationRequested)
|
||||
{
|
||||
wasCanceled = true;
|
||||
@@ -170,19 +170,19 @@ namespace FastRngTests.Float
|
||||
Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
|
||||
|
||||
var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(-1f, 1f, new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(-1f, 1f, new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(0u, 6u, new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(0u, 6u, new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng.NextNumber(0ul, 6ul, new NormalS02M05(), tokenSource2.Token);
|
||||
await rng2.NextNumber(0ul, 6ul, new NormalS02M05(rng2), tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
}
|
||||
|
||||
@@ -191,9 +191,9 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task OneSeed01()
|
||||
{
|
||||
var rng1 = new MultiThreadedRng(6);
|
||||
var rng2 = new MultiThreadedRng(6);
|
||||
var rng3 = new MultiThreadedRng(7);
|
||||
using var rng1 = new MultiThreadedRng(6);
|
||||
using var rng2 = new MultiThreadedRng(6);
|
||||
using var rng3 = new MultiThreadedRng(7);
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -206,11 +206,7 @@ namespace FastRngTests.Float
|
||||
var rng3Sample = new float[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
|
||||
rng1.StopProducer();
|
||||
rng2.StopProducer();
|
||||
rng3.StopProducer();
|
||||
|
||||
|
||||
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@@ -221,10 +217,10 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TwoSeeds01()
|
||||
{
|
||||
var rng1 = new MultiThreadedRng(3, 6);
|
||||
var rng2 = new MultiThreadedRng(3, 6);
|
||||
var rng3 = new MultiThreadedRng(3, 7);
|
||||
var rng4 = new MultiThreadedRng(6, 3);
|
||||
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);
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -241,12 +237,7 @@ namespace FastRngTests.Float
|
||||
var rng4Sample = new float[10];
|
||||
for (var n = 0; n < rng4Sample.Length; n++)
|
||||
rng4Sample[n] = await rng4.GetUniform();
|
||||
|
||||
rng1.StopProducer();
|
||||
rng2.StopProducer();
|
||||
rng3.StopProducer();
|
||||
rng4.StopProducer();
|
||||
|
||||
|
||||
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng4Sample));
|
||||
@@ -260,9 +251,9 @@ namespace FastRngTests.Float
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoSeed01()
|
||||
{
|
||||
var rng1 = new MultiThreadedRng();
|
||||
var rng2 = new MultiThreadedRng();
|
||||
var rng3 = new MultiThreadedRng();
|
||||
using var rng1 = new MultiThreadedRng();
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
using var rng3 = new MultiThreadedRng();
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -275,11 +266,7 @@ namespace FastRngTests.Float
|
||||
var rng3Sample = new float[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
|
||||
rng1.StopProducer();
|
||||
rng2.StopProducer();
|
||||
rng3.StopProducer();
|
||||
|
||||
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
Assert.That(rng2Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@@ -295,7 +282,7 @@ namespace FastRngTests.Float
|
||||
tokenSource.Cancel();
|
||||
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
var dist = new Uniform();
|
||||
var dist = new Uniform(this.rng);
|
||||
Assert.That(await rng2.NextNumber(1, 100_000, dist, token), Is.EqualTo(0));
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace FastRngTests.Float
|
||||
public async Task Generate1MNormal()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new NormalS02M05();
|
||||
var dist = new NormalS02M05(rng);
|
||||
var data = new float[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
@@ -59,7 +59,7 @@ namespace FastRngTests.Float
|
||||
public async Task Generate1MChiSquare()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new ChiSquareK4(); // TODO: Check the impact, when the rng gets set on ctor
|
||||
var dist = new ChiSquareK4(rng);
|
||||
var data = new float[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
|
||||
Reference in new issue
Block a user