Refactored to use generic TNum for any floating point type
This commit is contained in:
55 files changed
+578
-1147
No files matched your search
@@ -2,9 +2,9 @@ using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using FastRng;
|
||||
using FastRng.Distributions;
|
||||
using FastRngTests.Distributions;
|
||||
using NUnit.Framework;
|
||||
using Uniform = FastRng.Distributions.Uniform;
|
||||
using WeibullK05La1 = FastRng.Distributions.WeibullK05La1;
|
||||
|
||||
namespace FastRngTests;
|
||||
|
||||
@@ -16,8 +16,8 @@ public class DecisionTester
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task DecisionUniform01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new Uniform<float>(rng);
|
||||
|
||||
var neededCoinTossesA = 0;
|
||||
var neededCoinTossesB = 0;
|
||||
@@ -40,8 +40,8 @@ public class DecisionTester
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task DecisionWeibull01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new WeibullK05La1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new WeibullK05La1<float>(rng);
|
||||
|
||||
var neededCoinTossesA = 0;
|
||||
var neededCoinTossesB = 0;
|
||||
|
||||
@@ -15,8 +15,8 @@ public class BetaA2B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.BetaA2B2(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.BetaA2B2<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,9 +48,9 @@ public class BetaA2B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.BetaA2B2(rng);
|
||||
var dist = new FastRng.Distributions.BetaA2B2<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
@@ -63,9 +63,9 @@ public class BetaA2B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.BetaA2B2(rng);
|
||||
var dist = new FastRng.Distributions.BetaA2B2<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
@@ -78,6 +78,6 @@ public class BetaA2B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.BetaA2B2(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.BetaA2B2<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class BetaA2B5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.BetaA2B5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.BetaA2B5<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,9 +48,9 @@ public class BetaA2B5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.BetaA2B5(rng);
|
||||
var dist = new FastRng.Distributions.BetaA2B5<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
@@ -63,9 +63,9 @@ public class BetaA2B5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.BetaA2B5(rng);
|
||||
var dist = new FastRng.Distributions.BetaA2B5<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
@@ -78,6 +78,6 @@ public class BetaA2B5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.BetaA2B5(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.BetaA2B5<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class BetaA5B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.BetaA5B2(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.BetaA5B2<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,9 +48,9 @@ public class BetaA5B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.BetaA5B2(rng);
|
||||
var dist = new FastRng.Distributions.BetaA5B2<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
@@ -63,9 +63,9 @@ public class BetaA5B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.BetaA5B2(rng);
|
||||
var dist = new FastRng.Distributions.BetaA5B2<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
@@ -78,6 +78,6 @@ public class BetaA5B2
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.BetaA5B2(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.BetaA5B2<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,8 @@ public class CauchyLorentzX0
|
||||
// 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
|
||||
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -51,8 +51,8 @@ public class CauchyLorentzX0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -66,8 +66,8 @@ public class CauchyLorentzX0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -81,6 +81,6 @@ public class CauchyLorentzX0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.CauchyLorentzX0(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.CauchyLorentzX0<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,8 @@ public class CauchyLorentzX1
|
||||
// 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
|
||||
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX1<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -51,8 +51,8 @@ public class CauchyLorentzX1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -66,8 +66,8 @@ public class CauchyLorentzX1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.CauchyLorentzX0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -81,6 +81,6 @@ public class CauchyLorentzX1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.CauchyLorentzX1(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.CauchyLorentzX1<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class ChiSquareK1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -51,8 +51,8 @@ public class ChiSquareK1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -66,8 +66,8 @@ public class ChiSquareK1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -81,6 +81,6 @@ public class ChiSquareK1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ChiSquareK1(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ChiSquareK1<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class ChiSquareK10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -51,8 +51,8 @@ public class ChiSquareK10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -66,8 +66,8 @@ public class ChiSquareK10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -81,6 +81,6 @@ public class ChiSquareK10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ChiSquareK10(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ChiSquareK10<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class ChiSquareK4
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK4(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK4<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class ChiSquareK4
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK4(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK4<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class ChiSquareK4
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ChiSquareK4(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK4<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class ChiSquareK4
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ChiSquareK4(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ChiSquareK4<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class ExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ExponentialLa10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ExponentialLa10<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class ExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ExponentialLa10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ExponentialLa10<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class ExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ExponentialLa10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ExponentialLa10<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class ExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ExponentialLa10(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ExponentialLa10<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class ExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ExponentialLa5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ExponentialLa5<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class ExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ExponentialLa5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ExponentialLa5<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class ExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.ExponentialLa5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ExponentialLa5<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class ExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ExponentialLa5(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.ExponentialLa5<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class GammaA5B15
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.GammaA5B15(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.GammaA5B15<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class GammaA5B15
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.GammaA5B15(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.GammaA5B15<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class GammaA5B15
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.GammaA5B15(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.GammaA5B15<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class GammaA5B15
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.GammaA5B15(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.GammaA5B15<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class InverseExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa10<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class InverseExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa10<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class InverseExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa10(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa10<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class InverseExponentialLa10
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.InverseExponentialLa10(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.InverseExponentialLa10<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class InverseExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa5<float>(rng);
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class InverseExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa5<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class InverseExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa5(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseExponentialLa5<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class InverseExponentialLa5
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.InverseExponentialLa5(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.InverseExponentialLa5<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class InverseGammaA3B05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseGammaA3B05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseGammaA3B05<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class InverseGammaA3B05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseGammaA3B05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseGammaA3B05<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class InverseGammaA3B05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.InverseGammaA3B05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.InverseGammaA3B05<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class InverseGammaA3B05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.InverseGammaA3B05(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.InverseGammaA3B05<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class LaplaceB01M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M0<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class LaplaceB01M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class LaplaceB01M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class LaplaceB01M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.LaplaceB01M0(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.LaplaceB01M0<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class LaplaceB01M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M05<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class LaplaceB01M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M05<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class LaplaceB01M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LaplaceB01M05<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class LaplaceB01M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.LaplaceB01M05(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.LaplaceB01M05<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class LogNormalS1M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LogNormalS1M0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LogNormalS1M0<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class LogNormalS1M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LogNormalS1M0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LogNormalS1M0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class LogNormalS1M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.LogNormalS1M0(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.LogNormalS1M0<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class LogNormalS1M0
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.LogNormalS1M0(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.LogNormalS1M0<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -18,8 +18,8 @@ public class NormalS02M05
|
||||
const float MEAN = 0.5f;
|
||||
const float STANDARD_DEVIATION = 0.2f;
|
||||
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.NormalS02M05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.NormalS02M05<float>(rng);
|
||||
var stats = new RunningStatistics();
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
@@ -44,9 +44,9 @@ public class NormalS02M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.NormalS02M05(rng);
|
||||
var dist = new FastRng.Distributions.NormalS02M05<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
@@ -59,9 +59,9 @@ public class NormalS02M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.NormalS02M05(rng);
|
||||
var dist = new FastRng.Distributions.NormalS02M05<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
@@ -74,6 +74,6 @@ public class NormalS02M05
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.NormalS02M05(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.NormalS02M05<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class StudentTNu1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.StudentTNu1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.StudentTNu1<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class StudentTNu1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.StudentTNu1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.StudentTNu1<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class StudentTNu1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.StudentTNu1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.StudentTNu1<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class StudentTNu1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.StudentTNu1(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.StudentTNu1<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -20,7 +20,7 @@ public class Uniform
|
||||
const float MEAN = 0.5f * (A + B);
|
||||
const float VARIANCE = (1.0f / 12.0f) * (B - A) * (B - A);
|
||||
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var stats = new RunningStatistics();
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
@@ -58,7 +58,7 @@ public class Uniform
|
||||
const float P_HIGH = 1.0f - 0.25f * FAILURE_PROBABILITY;
|
||||
|
||||
var samples = new float[NUM_ROUNDS];
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
int n;
|
||||
|
||||
for (n = 0; n != NUM_ROUNDS; ++n)
|
||||
@@ -115,9 +115,9 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
@@ -130,9 +130,9 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
@@ -145,7 +145,7 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange04()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await rng.GetUniform();
|
||||
@@ -159,8 +159,8 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Uint()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 1_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -175,8 +175,8 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Ulong()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 1_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -191,8 +191,8 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Float()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 1_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -206,8 +206,8 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Uint()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 1_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -220,8 +220,8 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Ulong()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 1_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -234,8 +234,8 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Float()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 1_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -248,8 +248,8 @@ public class Uniform
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Uint()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 100_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -262,8 +262,8 @@ public class Uniform
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Ulong()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 100_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -276,8 +276,8 @@ public class Uniform
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Float()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.Uniform(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.Uniform<float>(rng);
|
||||
var distribution = new uint[101];
|
||||
var runs = 100_000_000;
|
||||
for (var n = 0; n < runs; n++)
|
||||
@@ -291,6 +291,6 @@ public class Uniform
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.Uniform(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.Uniform<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@ public class WeibullK05La1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.WeibullK05La1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.WeibullK05La1<float>(rng);
|
||||
var fra = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
@@ -48,8 +48,8 @@ public class WeibullK05La1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.WeibullK05La1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.WeibullK05La1<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(-1.0f, 1.0f);
|
||||
@@ -63,8 +63,8 @@ public class WeibullK05La1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new FastRng.Distributions.WeibullK05La1(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.WeibullK05La1<float>(rng);
|
||||
var samples = new float[1_000];
|
||||
for (var n = 0; n < samples.Length; n++)
|
||||
samples[n] = await dist.NextNumber(0.0f, 1.0f);
|
||||
@@ -78,6 +78,6 @@ public class WeibullK05La1
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void NoRandomNumberGenerator01()
|
||||
{
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.WeibullK05La1(null));
|
||||
Assert.Throws<ArgumentNullException>(() => new FastRng.Distributions.WeibullK05La1<float>(null));
|
||||
}
|
||||
}
|
||||
@@ -15,7 +15,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest01()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(-0.5f), Is.EqualTo(-3.544907701811087f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(-0.5f), Is.EqualTo(-3.544907701811087f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -23,7 +23,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest02()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(0.1f), Is.EqualTo(9.51350975f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(0.1f), Is.EqualTo(9.51350975f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -31,7 +31,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest03()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(0.5f), Is.EqualTo(1.772453850905517f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(0.5f), Is.EqualTo(1.772453850905517f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -39,7 +39,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest04()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(1.0f), Is.EqualTo(1.0f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(1.0f), Is.EqualTo(1.0f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -47,7 +47,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest05()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(1.5f), Is.EqualTo(0.8862269254527587f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(1.5f), Is.EqualTo(0.8862269254527587f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -55,7 +55,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest06()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(2.0f), Is.EqualTo(1.0f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(2.0f), Is.EqualTo(1.0f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -63,7 +63,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest07()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(3.0f), Is.EqualTo(2.0f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(3.0f), Is.EqualTo(2.0f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -71,7 +71,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest08()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(10.0f), Is.EqualTo(362_880.719f).Within(1e-6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(10.0f), Is.EqualTo(362_880.719f).Within(1e-6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -79,7 +79,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest09()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(140.0f), Is.EqualTo(float.NaN));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(140.0f), Is.EqualTo(float.NaN));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -87,7 +87,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void GammaTest10()
|
||||
{
|
||||
Assert.That(MathTools.Gamma(170.0f), Is.EqualTo(float.NaN));
|
||||
Assert.That(FloatingPointMathTools<float>.Gamma(170.0f), Is.EqualTo(float.NaN));
|
||||
}
|
||||
|
||||
#endregion
|
||||
@@ -99,7 +99,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger01()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(0), Is.EqualTo(1));
|
||||
Assert.That(IntegerMathTools.Factorial(0), Is.EqualTo(1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -107,7 +107,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger02()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(1), Is.EqualTo(1));
|
||||
Assert.That(IntegerMathTools.Factorial(1), Is.EqualTo(1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -115,7 +115,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger03()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(2), Is.EqualTo(2));
|
||||
Assert.That(IntegerMathTools.Factorial(2), Is.EqualTo(2));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -123,7 +123,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger04()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(3), Is.EqualTo(6));
|
||||
Assert.That(IntegerMathTools.Factorial(3), Is.EqualTo(6));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -131,7 +131,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger05()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(4), Is.EqualTo(24));
|
||||
Assert.That(IntegerMathTools.Factorial(4), Is.EqualTo(24));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -139,7 +139,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger06()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(5), Is.EqualTo(120));
|
||||
Assert.That(IntegerMathTools.Factorial(5), Is.EqualTo(120));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -147,7 +147,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger07()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(6), Is.EqualTo(720));
|
||||
Assert.That(IntegerMathTools.Factorial(6), Is.EqualTo(720));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -155,7 +155,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger08()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(7), Is.EqualTo(5_040));
|
||||
Assert.That(IntegerMathTools.Factorial(7), Is.EqualTo(5_040));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -163,7 +163,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger09()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(8), Is.EqualTo(40_320));
|
||||
Assert.That(IntegerMathTools.Factorial(8), Is.EqualTo(40_320));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -171,7 +171,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger10()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(9), Is.EqualTo(362_880));
|
||||
Assert.That(IntegerMathTools.Factorial(9), Is.EqualTo(362_880));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -179,7 +179,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger11()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(10), Is.EqualTo(3_628_800));
|
||||
Assert.That(IntegerMathTools.Factorial(10), Is.EqualTo(3_628_800));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -187,7 +187,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger12()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(11), Is.EqualTo(39_916_800));
|
||||
Assert.That(IntegerMathTools.Factorial(11), Is.EqualTo(39_916_800));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -195,7 +195,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger13()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(12), Is.EqualTo(479_001_600));
|
||||
Assert.That(IntegerMathTools.Factorial(12), Is.EqualTo(479_001_600));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -203,7 +203,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger14()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(13), Is.EqualTo(6_227_020_800));
|
||||
Assert.That(IntegerMathTools.Factorial(13), Is.EqualTo(6_227_020_800));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -211,7 +211,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger15()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(14), Is.EqualTo(87_178_291_200));
|
||||
Assert.That(IntegerMathTools.Factorial(14), Is.EqualTo(87_178_291_200));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -219,7 +219,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger16()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(15), Is.EqualTo(1_307_674_368_000));
|
||||
Assert.That(IntegerMathTools.Factorial(15), Is.EqualTo(1_307_674_368_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -227,7 +227,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger17()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(16), Is.EqualTo(20_922_789_888_000));
|
||||
Assert.That(IntegerMathTools.Factorial(16), Is.EqualTo(20_922_789_888_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -235,7 +235,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger18()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(17), Is.EqualTo(355_687_428_096_000));
|
||||
Assert.That(IntegerMathTools.Factorial(17), Is.EqualTo(355_687_428_096_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -243,7 +243,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger19()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(18), Is.EqualTo(6_402_373_705_728_000));
|
||||
Assert.That(IntegerMathTools.Factorial(18), Is.EqualTo(6_402_373_705_728_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -251,7 +251,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger20()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(19), Is.EqualTo(121_645_100_408_832_000));
|
||||
Assert.That(IntegerMathTools.Factorial(19), Is.EqualTo(121_645_100_408_832_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -259,7 +259,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger21()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(20), Is.EqualTo(2_432_902_008_176_640_000));
|
||||
Assert.That(IntegerMathTools.Factorial(20), Is.EqualTo(2_432_902_008_176_640_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -267,7 +267,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger22()
|
||||
{
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => MathTools.Factorial(21));
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => IntegerMathTools.Factorial(21));
|
||||
|
||||
// Note: 21! is not possible in C# until we got 128 bit integers, since:
|
||||
// ulong.max == 18_446_744_073_709_551_615 < 51_090_942_171_709_400_000
|
||||
@@ -278,27 +278,11 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger23()
|
||||
{
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => MathTools.Factorial(45_646));
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => IntegerMathTools.Factorial(45_646));
|
||||
|
||||
// Note: 45_646! is not possible in C# since:
|
||||
// ulong.max == 18_446_744_073_709_551_615
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger24()
|
||||
{
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => MathTools.Factorial(-1));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialInteger25()
|
||||
{
|
||||
Assert.Throws<ArgumentOutOfRangeException>(() => MathTools.Factorial(-6_565));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -309,7 +293,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialFloatingPoint01()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(0.5f), Is.EqualTo(0.886226925f).Within(1e6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Factorial(0.5f), Is.EqualTo(0.886226925f).Within(1e6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -317,7 +301,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialFloatingPoint02()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(1.5f), Is.EqualTo(1.329340388f).Within(1e6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Factorial(1.5f), Is.EqualTo(1.329340388f).Within(1e6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -325,7 +309,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialFloatingPoint03()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(-1.5f), Is.EqualTo(-1.329340388f).Within(1e6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Factorial(-1.5f), Is.EqualTo(-1.329340388f).Within(1e6f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
@@ -333,7 +317,7 @@ public class MathToolsTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public void FactorialFloatingPoint04()
|
||||
{
|
||||
Assert.That(MathTools.Factorial(7.5f), Is.EqualTo(14_034.407293483f).Within(1e6f));
|
||||
Assert.That(FloatingPointMathTools<float>.Factorial(7.5f), Is.EqualTo(14_034.407293483f).Within(1e6f));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -4,6 +4,7 @@ using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FastRng;
|
||||
using FastRng.Distributions;
|
||||
using FastRngTests.Distributions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace FastRngTests;
|
||||
@@ -11,14 +12,14 @@ namespace FastRngTests;
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class MultiThreadedRngTests
|
||||
{
|
||||
private readonly IRandom rng = new MultiThreadedRng();
|
||||
private readonly IRandom<float> rng = new MultiThreadedRng<float>();
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Uint()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
for (uint n = 0; n < 1_000_000; n++)
|
||||
Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -28,7 +29,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Ulong()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
for (ulong n = 0; n < 1_000_000; n++)
|
||||
Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -38,7 +39,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Float()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
for (var n = 0.0f; n < 1e6f; n++)
|
||||
Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
@@ -48,7 +49,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Uint()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(5, 5), Is.EqualTo(5));
|
||||
Assert.That(await dist.NextNumber(0, 0), Is.EqualTo(0));
|
||||
Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_000), Is.EqualTo(3_000_000_000));
|
||||
@@ -59,7 +60,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Ulong()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(5UL, 5), Is.EqualTo(5));
|
||||
Assert.That(await dist.NextNumber(0UL, 0), Is.EqualTo(0));
|
||||
Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_000), Is.EqualTo(3_000_000_000));
|
||||
@@ -70,7 +71,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Float()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(5f, 5f), Is.EqualTo(5));
|
||||
Assert.That(await dist.NextNumber(0f, 0f), Is.EqualTo(0));
|
||||
Assert.That(await dist.NextNumber(3e9f, 3e9f), Is.EqualTo(3e9f));
|
||||
@@ -81,7 +82,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Uint()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(5, 6), Is.InRange(5, 6));
|
||||
Assert.That(await dist.NextNumber(0, 1), Is.InRange(0, 1));
|
||||
Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
@@ -92,7 +93,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Ulong()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(5UL, 6), Is.InRange(5, 6));
|
||||
Assert.That(await dist.NextNumber(0UL, 1), Is.InRange(0, 1));
|
||||
Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
@@ -103,7 +104,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Float()
|
||||
{
|
||||
var dist = new Uniform(this.rng);
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(5f, 6f), Is.InRange(5f, 6f));
|
||||
Assert.That(await dist.NextNumber(0f, 1f), Is.InRange(0f, 1f));
|
||||
Assert.That(await dist.NextNumber(3e9f, 3e9f+2f), Is.InRange(3e9f, 3e9f+2f));
|
||||
@@ -114,8 +115,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Uint()
|
||||
{
|
||||
var distUniform = new Uniform(this.rng);
|
||||
var distNormal = new NormalS02M05(this.rng);
|
||||
var distUniform = new Uniform<float>(this.rng);
|
||||
var distNormal = new NormalS02M05<float>(this.rng);
|
||||
|
||||
Assert.That(await distUniform.NextNumber(10, 1), Is.InRange(1, 10));
|
||||
Assert.That(await distNormal.NextNumber(10, 1), Is.InRange(1, 10));
|
||||
@@ -129,8 +130,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Ulong()
|
||||
{
|
||||
var distUniform = new Uniform(this.rng);
|
||||
var distNormal = new NormalS02M05(this.rng);
|
||||
var distUniform = new Uniform<float>(this.rng);
|
||||
var distNormal = new NormalS02M05<float>(this.rng);
|
||||
|
||||
Assert.That(await distUniform.NextNumber(10UL, 1), Is.InRange(1, 10));
|
||||
Assert.That(await distNormal.NextNumber(10UL, 1), Is.InRange(1, 10));
|
||||
@@ -144,8 +145,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Float()
|
||||
{
|
||||
var distUniform = new Uniform(this.rng);
|
||||
var distNormal = new NormalS02M05(this.rng);
|
||||
var distUniform = new Uniform<float>(this.rng);
|
||||
var distNormal = new NormalS02M05<float>(this.rng);
|
||||
|
||||
Assert.That(await distUniform.NextNumber(10.0f, 1), Is.InRange(1, 10));
|
||||
Assert.That(await distNormal.NextNumber(10.0f, 1), Is.InRange(1, 10));
|
||||
@@ -158,8 +159,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestRange05()
|
||||
{
|
||||
var distUniform = new Uniform(this.rng);
|
||||
var distLorentz = new CauchyLorentzX1(this.rng);
|
||||
var distUniform = new Uniform<float>(this.rng);
|
||||
var distLorentz = new CauchyLorentzX1<float>(this.rng);
|
||||
|
||||
var rngContains0 = false;
|
||||
var rngContains1 = false;
|
||||
@@ -229,7 +230,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStoppingProducers01()
|
||||
{
|
||||
var rng2 = new MultiThreadedRng();
|
||||
var rng2 = new MultiThreadedRng<float>();
|
||||
rng2.Dispose();
|
||||
|
||||
var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
|
||||
@@ -255,19 +256,19 @@ public class MultiThreadedRngTests
|
||||
Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
|
||||
|
||||
var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05(rng2).NextNumber(tokenSource2.Token);
|
||||
await new NormalS02M05<float>(rng2).NextNumber(tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05(rng2).NextNumber(-1f, 1f, tokenSource2.Token);
|
||||
await new NormalS02M05<float>(rng2).NextNumber(-1f, 1f, tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05(rng2).NextNumber(0u, 6u, tokenSource2.Token);
|
||||
await new NormalS02M05<float>(rng2).NextNumber(0u, 6u, tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
|
||||
await new NormalS02M05<float>(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
}
|
||||
|
||||
@@ -276,9 +277,9 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task OneSeed01()
|
||||
{
|
||||
using var rng1 = new MultiThreadedRng(6);
|
||||
using var rng2 = new MultiThreadedRng(6);
|
||||
using var rng3 = new MultiThreadedRng(7);
|
||||
using var rng1 = new MultiThreadedRng<float>(6);
|
||||
using var rng2 = new MultiThreadedRng<float>(6);
|
||||
using var rng3 = new MultiThreadedRng<float>(7);
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -302,10 +303,10 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TwoSeeds01()
|
||||
{
|
||||
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);
|
||||
using var rng1 = new MultiThreadedRng<float>(3, 6);
|
||||
using var rng2 = new MultiThreadedRng<float>(3, 6);
|
||||
using var rng3 = new MultiThreadedRng<float>(3, 7);
|
||||
using var rng4 = new MultiThreadedRng<float>(6, 3);
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -336,9 +337,9 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoSeed01()
|
||||
{
|
||||
using var rng1 = new MultiThreadedRng();
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
using var rng3 = new MultiThreadedRng();
|
||||
using var rng1 = new MultiThreadedRng<float>();
|
||||
using var rng2 = new MultiThreadedRng<float>();
|
||||
using var rng3 = new MultiThreadedRng<float>();
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
@@ -366,8 +367,8 @@ public class MultiThreadedRngTests
|
||||
var token = tokenSource.Token;
|
||||
tokenSource.Cancel();
|
||||
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
var dist = new Uniform(this.rng);
|
||||
using var rng2 = new MultiThreadedRng<float>();
|
||||
var dist = new Uniform<float>(this.rng);
|
||||
Assert.That(await dist.NextNumber(1, 100_000, token), Is.EqualTo(0));
|
||||
}
|
||||
|
||||
@@ -380,7 +381,7 @@ public class MultiThreadedRngTests
|
||||
var token = tokenSource.Token;
|
||||
tokenSource.Cancel();
|
||||
|
||||
using var rng2 = new MultiThreadedRng();
|
||||
using var rng2 = new MultiThreadedRng<float>();
|
||||
Assert.That(await rng2.GetUniform(token), Is.NaN);
|
||||
}
|
||||
|
||||
@@ -389,7 +390,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic01()
|
||||
{
|
||||
using var rng2 = new MultiThreadedRng(16);
|
||||
using var rng2 = new MultiThreadedRng<float>(16);
|
||||
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12712699).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.5764246).Within(1e-7f));
|
||||
@@ -428,8 +429,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic02()
|
||||
{
|
||||
using var rng2 = new MultiThreadedRng(16);
|
||||
var dist = new Uniform(rng2);
|
||||
using var rng2 = new MultiThreadedRng<float>(16);
|
||||
var dist = new Uniform<float>(rng2);
|
||||
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(58));
|
||||
@@ -468,8 +469,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic03()
|
||||
{
|
||||
using var rng2 = new MultiThreadedRng(16);
|
||||
var dist = new CauchyLorentzX0(rng2);
|
||||
using var rng2 = new MultiThreadedRng<float>(16);
|
||||
var dist = new CauchyLorentzX0<float>(rng2);
|
||||
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
||||
@@ -508,7 +509,7 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic01b()
|
||||
{
|
||||
using var rng2 = new MultiThreadedRng(16, 362_436_069);
|
||||
using var rng2 = new MultiThreadedRng<float>(16, 362_436_069);
|
||||
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12712699).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.5764246).Within(1e-7f));
|
||||
@@ -547,8 +548,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic02b()
|
||||
{
|
||||
using var rng2 = new MultiThreadedRng(16, 362_436_069);
|
||||
var dist = new Uniform(rng2);
|
||||
using var rng2 = new MultiThreadedRng<float>(16, 362_436_069);
|
||||
var dist = new Uniform<float>(rng2);
|
||||
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(58));
|
||||
@@ -587,8 +588,8 @@ public class MultiThreadedRngTests
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic03b()
|
||||
{
|
||||
using var rng2 = new MultiThreadedRng(16, 362_436_069);
|
||||
var dist = new CauchyLorentzX0(rng2);
|
||||
using var rng2 = new MultiThreadedRng<float>(16, 362_436_069);
|
||||
var dist = new CauchyLorentzX0<float>(rng2);
|
||||
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
||||
|
||||
@@ -20,7 +20,7 @@ public class PerformanceTests
|
||||
[Category(TestCategories.PERFORMANCE)]
|
||||
public async Task Generate1MUniform()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var data = new float[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
@@ -38,8 +38,8 @@ public class PerformanceTests
|
||||
[Category(TestCategories.PERFORMANCE)]
|
||||
public async Task Generate1MNormal()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new NormalS02M05(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new NormalS02M05<float>(rng);
|
||||
var data = new float[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
@@ -57,8 +57,8 @@ public class PerformanceTests
|
||||
[Category(TestCategories.PERFORMANCE)]
|
||||
public async Task Generate1MChiSquare()
|
||||
{
|
||||
using var rng = new MultiThreadedRng();
|
||||
var dist = new ChiSquareK4(rng);
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new ChiSquareK4<float>(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