Increased performance by factor two by removing all async parts
Closes #2
This commit is contained in:
parent
1c28a57c06
commit
d0eca012ce
@ -19,46 +19,46 @@ public abstract class Distribution<TNum> : IDistribution<TNum> where TNum : IFlo
|
||||
|
||||
private protected abstract TNum ShapeFunction(TNum x);
|
||||
|
||||
public async ValueTask<TNum> GetDistributedValue(CancellationToken token = default) => await this.fitter.NextNumber(token);
|
||||
public TNum GetDistributedValue(CancellationToken token = default) => this.fitter.NextNumber(token);
|
||||
|
||||
public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
|
||||
public uint NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
|
||||
{
|
||||
// Swap the values if the range start is greater than the range end:
|
||||
if (rangeStart > rangeEnd)
|
||||
(rangeStart, rangeEnd) = (rangeEnd, rangeStart);
|
||||
|
||||
var range = rangeEnd - rangeStart;
|
||||
var distributedValue = await this.GetDistributedValue(cancel);
|
||||
var distributedValue = this.GetDistributedValue(cancel);
|
||||
return (uint) ((float.CreateChecked(distributedValue) * range) + rangeStart);
|
||||
}
|
||||
|
||||
public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default)
|
||||
public ulong NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default)
|
||||
{
|
||||
// Swap the values if the range start is greater than the range end:
|
||||
if (rangeStart > rangeEnd)
|
||||
(rangeStart, rangeEnd) = (rangeEnd, rangeStart);
|
||||
|
||||
var range = rangeEnd - rangeStart;
|
||||
var distributedValue = await this.GetDistributedValue(cancel);
|
||||
var distributedValue = this.GetDistributedValue(cancel);
|
||||
return (ulong) ((double.CreateChecked(distributedValue) * range) + rangeStart);
|
||||
}
|
||||
|
||||
public async ValueTask<TNum> NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default)
|
||||
public TNum NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default)
|
||||
{
|
||||
// Swap the values if the range start is greater than the range end:
|
||||
if (rangeStart > rangeEnd)
|
||||
(rangeStart, rangeEnd) = (rangeEnd, rangeStart);
|
||||
|
||||
var range = rangeEnd - rangeStart;
|
||||
var distributedValue = await this.GetDistributedValue(cancel);
|
||||
var distributedValue = this.GetDistributedValue(cancel);
|
||||
return (distributedValue * range) + rangeStart;
|
||||
}
|
||||
|
||||
public async ValueTask<TNum> NextNumber(CancellationToken cancel = default) => await this.NextNumber(TNum.Zero, TNum.One, cancel);
|
||||
public TNum NextNumber(CancellationToken cancel = default) => this.NextNumber(TNum.Zero, TNum.One, cancel);
|
||||
|
||||
public async ValueTask<bool> HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default)
|
||||
public bool HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default)
|
||||
{
|
||||
var number = await this.NextNumber(cancel);
|
||||
var number = this.NextNumber(cancel);
|
||||
return number > above && number < below;
|
||||
}
|
||||
}
|
@ -6,15 +6,15 @@ namespace FastRng.Distributions;
|
||||
|
||||
public interface IDistribution<TNum> where TNum : IFloatingPointIeee754<TNum>
|
||||
{
|
||||
public ValueTask<TNum> GetDistributedValue(CancellationToken token);
|
||||
public TNum GetDistributedValue(CancellationToken token = default);
|
||||
|
||||
public ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default);
|
||||
public uint NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default);
|
||||
|
||||
public ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default);
|
||||
public ulong NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default);
|
||||
|
||||
public ValueTask<TNum> NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default);
|
||||
public TNum NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default);
|
||||
|
||||
public ValueTask<TNum> NextNumber(CancellationToken cancel = default);
|
||||
public TNum NextNumber(CancellationToken cancel = default);
|
||||
|
||||
public ValueTask<bool> HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default);
|
||||
public bool HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default);
|
||||
}
|
@ -14,46 +14,46 @@ public sealed class Uniform<TNum> : IDistribution<TNum> where TNum : IFloatingPo
|
||||
this.rng = rng ?? throw new ArgumentNullException(nameof(rng), "An IRandom<TNum> implementation is needed.");
|
||||
}
|
||||
|
||||
public async ValueTask<TNum> GetDistributedValue(CancellationToken token = default) => await this.rng.GetUniform(token);
|
||||
public TNum GetDistributedValue(CancellationToken token = default) => this.rng.GetUniform(token);
|
||||
|
||||
public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
|
||||
public uint NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
|
||||
{
|
||||
// Swap the values if the range start is greater than the range end:
|
||||
if (rangeStart > rangeEnd)
|
||||
(rangeStart, rangeEnd) = (rangeEnd, rangeStart);
|
||||
|
||||
var range = rangeEnd - rangeStart;
|
||||
var distributedValue = await this.GetDistributedValue(cancel);
|
||||
var distributedValue = this.GetDistributedValue(cancel);
|
||||
return (uint) ((float.CreateChecked(distributedValue) * range) + rangeStart);
|
||||
}
|
||||
|
||||
public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default)
|
||||
public ulong NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default)
|
||||
{
|
||||
// Swap the values if the range start is greater than the range end:
|
||||
if (rangeStart > rangeEnd)
|
||||
(rangeStart, rangeEnd) = (rangeEnd, rangeStart);
|
||||
|
||||
var range = rangeEnd - rangeStart;
|
||||
var distributedValue = await this.GetDistributedValue(cancel);
|
||||
var distributedValue = this.GetDistributedValue(cancel);
|
||||
return (ulong) ((double.CreateChecked(distributedValue) * range) + rangeStart);
|
||||
}
|
||||
|
||||
public async ValueTask<TNum> NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default)
|
||||
public TNum NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default)
|
||||
{
|
||||
// Swap the values if the range start is greater than the range end:
|
||||
if (rangeStart > rangeEnd)
|
||||
(rangeStart, rangeEnd) = (rangeEnd, rangeStart);
|
||||
|
||||
var range = rangeEnd - rangeStart;
|
||||
var distributedValue = await this.GetDistributedValue(cancel);
|
||||
var distributedValue = this.GetDistributedValue(cancel);
|
||||
return (distributedValue * range) + rangeStart;
|
||||
}
|
||||
|
||||
public async ValueTask<TNum> NextNumber(CancellationToken cancel = default) => await this.NextNumber(TNum.Zero, TNum.One, cancel);
|
||||
public TNum NextNumber(CancellationToken cancel = default) => this.NextNumber(TNum.Zero, TNum.One, cancel);
|
||||
|
||||
public async ValueTask<bool> HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default)
|
||||
public bool HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default)
|
||||
{
|
||||
var number = await this.NextNumber(cancel);
|
||||
var number = this.NextNumber(cancel);
|
||||
return number > above && number < below;
|
||||
}
|
||||
}
|
@ -18,6 +18,5 @@ public interface IRandom<TNum> : IDisposable where TNum : IFloatingPointIeee754<
|
||||
/// This method is thread-safe. You can consume numbers from the same generator
|
||||
/// by using multiple threads at the same time.
|
||||
/// </remarks>
|
||||
/// <param name="cancel">An optional cancellation token.</param>
|
||||
public ValueTask<TNum> GetUniform(CancellationToken cancel = default);
|
||||
public TNum GetUniform(CancellationToken cancel = default);
|
||||
}
|
@ -29,15 +29,19 @@ namespace FastRng;
|
||||
public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TNum : IFloatingPointIeee754<TNum>, IAdditionOperators<TNum, TNum, TNum>
|
||||
{
|
||||
#if DEBUG
|
||||
private const int BUFFER_SIZE = 10_000;
|
||||
private const int BUFFER_SIZE = 1_000_000;
|
||||
#else
|
||||
private const int BUFFER_SIZE = 1_000_000;
|
||||
#endif
|
||||
|
||||
// The queue size means, how many buffer we store in a queue at the same time:
|
||||
private const int QUEUE_SIZE = 2;
|
||||
private const int QUEUE_SIZE_FLOAT = 2;
|
||||
|
||||
// The queue size means, how many buffer we store in a queue at the same time:
|
||||
private const int QUEUE_SIZE_INT = QUEUE_SIZE_FLOAT * 2;
|
||||
|
||||
private static readonly TNum CONST_FLOAT_CONVERSION = TNum.CreateChecked(2.328306435454494e-10f);
|
||||
private static readonly object LOCKER = new();
|
||||
|
||||
// Gets used to stop the producer threads:
|
||||
private readonly CancellationTokenSource producerTokenSource = new();
|
||||
@ -169,7 +173,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
|
||||
try
|
||||
{
|
||||
// Ensure, that we do not produce more buffers, as configured:
|
||||
if (this.queueIntegers.Count < QUEUE_SIZE)
|
||||
if (this.queueIntegers.Count < QUEUE_SIZE_INT)
|
||||
{
|
||||
this.queueIntegers.Enqueue(nextBuffer);
|
||||
break;
|
||||
@ -222,7 +226,7 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
|
||||
try
|
||||
{
|
||||
// Ensure, that the queue contains only the configured number of buffers:
|
||||
if (this.queueFloats.Count < QUEUE_SIZE)
|
||||
if (this.queueFloats.Count < QUEUE_SIZE_FLOAT)
|
||||
{
|
||||
this.queueFloats.Enqueue(nextBuffer);
|
||||
break;
|
||||
@ -255,67 +259,37 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
|
||||
/// This method is thread-safe. You can consume numbers from the same generator
|
||||
/// by using multiple threads at the same time.
|
||||
/// </remarks>
|
||||
/// <param name="cancel">An optional cancellation token.</param>
|
||||
public async ValueTask<TNum> GetUniform(CancellationToken cancel = default)
|
||||
public TNum GetUniform(CancellationToken cancel = default)
|
||||
{
|
||||
while (!cancel.IsCancellationRequested)
|
||||
{
|
||||
// Check, if we need a new buffer to read from:
|
||||
if (cancel.IsCancellationRequested)
|
||||
return TNum.NaN;
|
||||
|
||||
Start:
|
||||
|
||||
// Check if we have to load the next buffer:
|
||||
if (this.currentBufferPointer >= BUFFER_SIZE)
|
||||
{
|
||||
// Create a local copy of the current buffer's pointer:
|
||||
var currentBufferReference = this.currentBuffer;
|
||||
// We have to get the next buffer from the queue. This is a critical
|
||||
// section, because we have to ensure, that only one thread at a time
|
||||
// can get the next buffer:
|
||||
lock (LOCKER)
|
||||
{
|
||||
// We are might not the first thread, which has to get the next buffer.
|
||||
// When some other thread has already got the next buffer, the pointer
|
||||
// was already reset to zero. In this case, we start over again:
|
||||
if(this.currentBufferPointer < BUFFER_SIZE)
|
||||
goto Start;
|
||||
|
||||
// Here, we store the next buffer until we implement it:
|
||||
var nextBuffer = Array.Empty<TNum>();
|
||||
|
||||
// Try to get the next buffer from the queue:
|
||||
while (this.currentBufferPointer >= BUFFER_SIZE && currentBufferReference == this.currentBuffer && !this.queueFloats.TryDequeue(out nextBuffer))
|
||||
while (!this.queueFloats.TryDequeue(out this.currentBuffer))
|
||||
{
|
||||
//
|
||||
// Case: There is no next buffer available.
|
||||
// Must wait for producer(s) to provide next.
|
||||
//
|
||||
try
|
||||
{
|
||||
await Task.Delay(this.waiter, cancel);
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
//
|
||||
// Case: The consumer cancelled the request.
|
||||
//
|
||||
if (cancel.IsCancellationRequested)
|
||||
return TNum.NaN;
|
||||
}
|
||||
|
||||
Thread.Sleep(TimeSpan.FromMilliseconds(6));
|
||||
}
|
||||
|
||||
//
|
||||
// Note: In general, it does not matter if the following compare-exchange is successful.
|
||||
// 1st case: It was successful -- everything is fine. But we are responsible to re-set the currentBufferPointer.
|
||||
// 2nd case: It was not successful. This means, that another thread was successful, though.
|
||||
// That case is fine as well. But we would loose one buffer of work. Thus, we
|
||||
// check for this case and preserve the buffer full of work.
|
||||
//
|
||||
|
||||
// Try to implement the dequeued buffer without locking other threads:
|
||||
if (Interlocked.CompareExchange(ref this.currentBuffer, nextBuffer, currentBufferReference) != currentBufferReference)
|
||||
{
|
||||
//
|
||||
// Case: Another thread updated the buffer already.
|
||||
// Thus, we enqueue our copy of the next buffer to preserve it.
|
||||
//
|
||||
this.queueFloats.Enqueue(nextBuffer);
|
||||
|
||||
// Next? We can go ahead and yield a random number...
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Case: We updated the buffer.
|
||||
//
|
||||
// Reset the pointer for the next thread or call:
|
||||
this.currentBufferPointer = 0;
|
||||
|
||||
// Next? We can go ahead and yield a random number...
|
||||
}
|
||||
}
|
||||
|
||||
@ -326,26 +300,15 @@ public sealed class MultiThreadedRng<TNum> : IRandom<TNum>, IDisposable where TN
|
||||
var nextPointer = myPointer + 1;
|
||||
|
||||
// Try to update the pointer without locking other threads:
|
||||
if (Interlocked.CompareExchange(ref this.currentBufferPointer, nextPointer, myPointer) == myPointer)
|
||||
{
|
||||
if (Interlocked.CompareExchange(ref this.currentBufferPointer, nextPointer, myPointer) != myPointer)
|
||||
goto Start;
|
||||
|
||||
//
|
||||
// Case: Success. We updated the pointer and, thus, can use the pointer to read a number.
|
||||
// Case: Success. We updated the pointer and, thus, can use the read number.
|
||||
//
|
||||
return this.currentBuffer[myPointer];
|
||||
}
|
||||
|
||||
//
|
||||
// Case: Another thread updated the pointer already. Must restart the process
|
||||
// to get a random number.
|
||||
//
|
||||
}
|
||||
|
||||
//
|
||||
// Case: The consumer cancelled the request.
|
||||
//
|
||||
return TNum.NaN;
|
||||
}
|
||||
|
||||
private void StopProducer() => this.producerTokenSource.Cancel();
|
||||
|
||||
/// <summary>
|
||||
|
@ -50,11 +50,11 @@ public sealed class ShapeFitter<TNum> where TNum : IFloatingPointIeee754<TNum>,
|
||||
/// </summary>
|
||||
/// <param name="token">An optional cancellation token.</param>
|
||||
/// <returns>The next value regarding the given shape.</returns>
|
||||
public async ValueTask<TNum> NextNumber(CancellationToken token = default)
|
||||
public TNum NextNumber(CancellationToken token = default)
|
||||
{
|
||||
while (!token.IsCancellationRequested)
|
||||
{
|
||||
var x = await this.rng.GetUniform(token);
|
||||
var x = this.rng.GetUniform(token);
|
||||
if (TNum.IsNaN(x))
|
||||
return x;
|
||||
|
||||
@ -63,7 +63,7 @@ public sealed class ShapeFitter<TNum> where TNum : IFloatingPointIeee754<TNum>,
|
||||
nextBucket = this.probabilities.Length - 1;
|
||||
|
||||
var threshold = this.probabilities[nextBucket];
|
||||
var y = await this.uniform.NextNumber(TNum.Zero, this.max, token);
|
||||
var y = this.uniform.NextNumber(TNum.Zero, this.max, token);
|
||||
if (TNum.IsNaN(y))
|
||||
return y;
|
||||
|
||||
|
@ -3,7 +3,6 @@ using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using FastRng;
|
||||
using FastRng.Distributions;
|
||||
using FastRngTests.Distributions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace FastRngTests;
|
||||
@ -23,9 +22,9 @@ public class DecisionTester
|
||||
var neededCoinTossesB = 0;
|
||||
var neededCoinTossesC = 0;
|
||||
|
||||
for(var n = 0; n < 100; n++) while (!await dist.HasDecisionBeenMade(0.0f, 0.1f)) neededCoinTossesA++;
|
||||
for(var n = 0; n < 100; n++) while (!await dist.HasDecisionBeenMade(0.5f, 0.6f)) neededCoinTossesB++;
|
||||
for(var n = 0; n < 100; n++) while (!await dist.HasDecisionBeenMade(0.8f, 0.9f)) neededCoinTossesC++;
|
||||
for(var n = 0; n < 100; n++) while (!dist.HasDecisionBeenMade(0.0f, 0.1f)) neededCoinTossesA++;
|
||||
for(var n = 0; n < 100; n++) while (!dist.HasDecisionBeenMade(0.5f, 0.6f)) neededCoinTossesB++;
|
||||
for(var n = 0; n < 100; n++) while (!dist.HasDecisionBeenMade(0.8f, 0.9f)) neededCoinTossesC++;
|
||||
|
||||
var values = new[] {neededCoinTossesA, neededCoinTossesB, neededCoinTossesC};
|
||||
var max = values.Max();
|
||||
@ -47,9 +46,9 @@ public class DecisionTester
|
||||
var neededCoinTossesB = 0;
|
||||
var neededCoinTossesC = 0;
|
||||
|
||||
for(var n = 0; n < 100; n++) while (!await dist.HasDecisionBeenMade(0.0f, 0.1f)) neededCoinTossesA++;
|
||||
for(var n = 0; n < 100; n++) while (!await dist.HasDecisionBeenMade(0.5f, 0.6f)) neededCoinTossesB++;
|
||||
for(var n = 0; n < 100; n++) while (!await dist.HasDecisionBeenMade(0.8f, 0.9f)) neededCoinTossesC++;
|
||||
for(var n = 0; n < 100; n++) while (!dist.HasDecisionBeenMade(0.0f, 0.1f)) neededCoinTossesA++;
|
||||
for(var n = 0; n < 100; n++) while (!dist.HasDecisionBeenMade(0.5f, 0.6f)) neededCoinTossesB++;
|
||||
for(var n = 0; n < 100; n++) while (!dist.HasDecisionBeenMade(0.8f, 0.9f)) neededCoinTossesC++;
|
||||
|
||||
var values = new[] {neededCoinTossesA, neededCoinTossesB, neededCoinTossesC};
|
||||
var max = values.Max();
|
||||
|
@ -13,14 +13,14 @@ public class BetaA2B2
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
public void TestBetaDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class BetaA2B2
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
public void TestBetaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class BetaA2B2
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
public void TestBetaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class BetaA2B5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
public void TestBetaDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class BetaA2B5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
public void TestBetaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class BetaA2B5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
public void TestBetaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class BetaA5B2
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaDistribution01()
|
||||
public void TestBetaDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class BetaA5B2
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange01()
|
||||
public void TestBetaGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class BetaA5B2
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestBetaGeneratorWithRange02()
|
||||
public void TestBetaGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,7 +13,7 @@ public class CauchyLorentzX0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyDistribution01()
|
||||
public void TestCauchyDistribution01()
|
||||
{
|
||||
// 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
|
||||
@ -23,7 +23,7 @@ public class CauchyLorentzX0
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -49,13 +49,13 @@ public class CauchyLorentzX0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange01()
|
||||
public void TestCauchyGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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");
|
||||
@ -64,13 +64,13 @@ public class CauchyLorentzX0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange02()
|
||||
public void TestCauchyGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,7 +13,7 @@ public class CauchyLorentzX1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyDistribution01()
|
||||
public void TestCauchyDistribution01()
|
||||
{
|
||||
// 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
|
||||
@ -23,7 +23,7 @@ public class CauchyLorentzX1
|
||||
var fqa = new FrequencyAnalysis();
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -49,13 +49,13 @@ public class CauchyLorentzX1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange01()
|
||||
public void TestCauchyGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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");
|
||||
@ -64,13 +64,13 @@ public class CauchyLorentzX1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCauchyGeneratorWithRange02()
|
||||
public void TestCauchyGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,7 +13,7 @@ public class ChiSquareK1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
public void TestChiSquareDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK1<float>(rng);
|
||||
@ -21,7 +21,7 @@ public class ChiSquareK1
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
{
|
||||
var value = await dist.NextNumber();
|
||||
var value = dist.NextNumber();
|
||||
fqa.CountThis(value);
|
||||
}
|
||||
|
||||
@ -49,13 +49,13 @@ public class ChiSquareK1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
public void TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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,13 +64,13 @@ public class ChiSquareK1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
public void TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,7 +13,7 @@ public class ChiSquareK10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
public void TestChiSquareDistribution01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var dist = new FastRng.Distributions.ChiSquareK10<float>(rng);
|
||||
@ -21,7 +21,7 @@ public class ChiSquareK10
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
{
|
||||
var value = await dist.NextNumber();
|
||||
var value = dist.NextNumber();
|
||||
fqa.CountThis(value);
|
||||
}
|
||||
|
||||
@ -49,13 +49,13 @@ public class ChiSquareK10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
public void TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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,13 +64,13 @@ public class ChiSquareK10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
public void TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class ChiSquareK4
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareDistribution01()
|
||||
public void TestChiSquareDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class ChiSquareK4
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange01()
|
||||
public void TestChiSquareGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class ChiSquareK4
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestChiSquareGeneratorWithRange02()
|
||||
public void TestChiSquareGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class ExponentialLa10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
public void TestExponentialDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class ExponentialLa10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
public void TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class ExponentialLa10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
public void TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class ExponentialLa5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
public void TestExponentialDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class ExponentialLa5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
public void TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class ExponentialLa5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
public void TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class GammaA5B15
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaDistribution01()
|
||||
public void TestGammaDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class GammaA5B15
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange01()
|
||||
public void TestGammaGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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,13 +61,13 @@ public class GammaA5B15
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestGammaGeneratorWithRange02()
|
||||
public void TestGammaGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class InverseExponentialLa10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
public void TestExponentialDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class InverseExponentialLa10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
public void TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class InverseExponentialLa10
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
public void TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class InverseExponentialLa5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialDistribution01()
|
||||
public void TestExponentialDistribution01()
|
||||
{
|
||||
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++)
|
||||
fqa.CountThis(await dist.NextNumber());
|
||||
fqa.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class InverseExponentialLa5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange01()
|
||||
public void TestExponentialGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class InverseExponentialLa5
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestExponentialGeneratorWithRange02()
|
||||
public void TestExponentialGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class InverseGammaA3B05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaDistribution01()
|
||||
public void TestInverseGammaDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class InverseGammaA3B05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange01()
|
||||
public void TestInverseGammaGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class InverseGammaA3B05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestInverseGammaGeneratorWithRange02()
|
||||
public void TestInverseGammaGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class LaplaceB01M0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceDistribution01()
|
||||
public void TestLaplaceDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class LaplaceB01M0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange01()
|
||||
public void TestLaplaceGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class LaplaceB01M0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange02()
|
||||
public void TestLaplaceGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class LaplaceB01M05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceDistribution01()
|
||||
public void TestLaplaceDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class LaplaceB01M05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange01()
|
||||
public void TestLaplaceGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class LaplaceB01M05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLaplaceGeneratorWithRange02()
|
||||
public void TestLaplaceGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class LogNormalS1M0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalDistribution01()
|
||||
public void TestLogNormalDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class LogNormalS1M0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange01()
|
||||
public void TestLogNormalGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class LogNormalS1M0
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestLogNormalGeneratorWithRange02()
|
||||
public void TestLogNormalGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,7 +13,7 @@ public class NormalS02M05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalDistribution01()
|
||||
public void TestNormalDistribution01()
|
||||
{
|
||||
const float MEAN = 0.5f;
|
||||
const float STANDARD_DEVIATION = 0.2f;
|
||||
@ -25,7 +25,7 @@ public class NormalS02M05
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
{
|
||||
var nextNumber = await dist.NextNumber();
|
||||
var nextNumber = dist.NextNumber();
|
||||
stats.Push(nextNumber);
|
||||
fra.CountThis(nextNumber);
|
||||
}
|
||||
@ -42,13 +42,13 @@ public class NormalS02M05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange01()
|
||||
public void TestNormalGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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");
|
||||
@ -57,13 +57,13 @@ public class NormalS02M05
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestNormalGeneratorWithRange02()
|
||||
public void TestNormalGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,14 +13,14 @@ public class StudentTNu1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTDistribution01()
|
||||
public void TestStudentTDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class StudentTNu1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange01()
|
||||
public void TestStudentTGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class StudentTNu1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStudentTGeneratorWithRange02()
|
||||
public void TestStudentTGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -13,7 +13,7 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformDistribution01()
|
||||
public void TestUniformDistribution01()
|
||||
{
|
||||
const float A = 0.0f;
|
||||
const float B = 1.0f;
|
||||
@ -26,7 +26,7 @@ public class Uniform
|
||||
|
||||
for (var n = 0; n < 100_000; n++)
|
||||
{
|
||||
var value = await rng.GetUniform();
|
||||
var value = rng.GetUniform();
|
||||
stats.Push(value);
|
||||
fra.CountThis(value);
|
||||
}
|
||||
@ -62,7 +62,7 @@ public class Uniform
|
||||
int n;
|
||||
|
||||
for (n = 0; n != NUM_ROUNDS; ++n)
|
||||
samples[n] = await rng.GetUniform();
|
||||
samples[n] = rng.GetUniform();
|
||||
|
||||
Array.Sort(samples);
|
||||
|
||||
@ -113,13 +113,13 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange01()
|
||||
public void TestUniformGeneratorWithRange01()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
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");
|
||||
@ -128,13 +128,13 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange02()
|
||||
public void TestUniformGeneratorWithRange02()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var samples = new float[1_000];
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
@ -143,12 +143,12 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestUniformGeneratorWithRange04()
|
||||
public void TestUniformGeneratorWithRange04()
|
||||
{
|
||||
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();
|
||||
samples[n] = rng.GetUniform();
|
||||
|
||||
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");
|
||||
@ -157,14 +157,14 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Uint()
|
||||
public void TestRange05Uint()
|
||||
{
|
||||
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++)
|
||||
distribution[await dist.NextNumber(0, 100)]++;
|
||||
distribution[dist.NextNumber(0, 100)]++;
|
||||
|
||||
for (var n = 0; n < distribution.Length - 1; n++)
|
||||
Assert.That(distribution[n], Is.GreaterThan(0));
|
||||
@ -173,14 +173,14 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Ulong()
|
||||
public void TestRange05Ulong()
|
||||
{
|
||||
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++)
|
||||
distribution[await dist.NextNumber(0UL, 100)]++;
|
||||
distribution[dist.NextNumber(0UL, 100)]++;
|
||||
|
||||
for (var n = 0; n < distribution.Length - 1; n++)
|
||||
Assert.That(distribution[n], Is.GreaterThan(0));
|
||||
@ -189,14 +189,14 @@ public class Uniform
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange05Float()
|
||||
public void TestRange05Float()
|
||||
{
|
||||
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++)
|
||||
distribution[(uint)MathF.Floor(await dist.NextNumber(0.0f, 100.0f))]++;
|
||||
distribution[(uint)MathF.Floor(dist.NextNumber(0.0f, 100.0f))]++;
|
||||
|
||||
for (var n = 0; n < distribution.Length - 1; n++)
|
||||
Assert.That(distribution[n], Is.GreaterThan(0));
|
||||
@ -204,84 +204,84 @@ public class Uniform
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Uint()
|
||||
public void TestDistribution001Uint()
|
||||
{
|
||||
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++)
|
||||
distribution[await dist.NextNumber(0, 100)]++;
|
||||
distribution[dist.NextNumber(0, 100)]++;
|
||||
|
||||
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Ulong()
|
||||
public void TestDistribution001Ulong()
|
||||
{
|
||||
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++)
|
||||
distribution[await dist.NextNumber(0UL, 100)]++;
|
||||
distribution[dist.NextNumber(0UL, 100)]++;
|
||||
|
||||
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDistribution001Float()
|
||||
public void TestDistribution001Float()
|
||||
{
|
||||
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++)
|
||||
distribution[(uint)MathF.Floor(await dist.NextNumber(0.0f, 100.0f))]++;
|
||||
distribution[(uint)MathF.Floor(dist.NextNumber(0.0f, 100.0f))]++;
|
||||
|
||||
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Uint()
|
||||
public void TestDistribution002Uint()
|
||||
{
|
||||
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++)
|
||||
distribution[await dist.NextNumber(0, 100)]++;
|
||||
distribution[dist.NextNumber(0, 100)]++;
|
||||
|
||||
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Ulong()
|
||||
public void TestDistribution002Ulong()
|
||||
{
|
||||
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++)
|
||||
distribution[await dist.NextNumber(0UL, 100)]++;
|
||||
distribution[dist.NextNumber(0UL, 100)]++;
|
||||
|
||||
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestDistribution002Float()
|
||||
public void TestDistribution002Float()
|
||||
{
|
||||
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++)
|
||||
distribution[(uint)MathF.Floor(await dist.NextNumber(0.0f, 100.0f))]++;
|
||||
distribution[(uint)MathF.Floor(dist.NextNumber(0.0f, 100.0f))]++;
|
||||
|
||||
Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
|
||||
}
|
||||
|
@ -13,14 +13,14 @@ public class WeibullK05La1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullDistribution01()
|
||||
public void TestWeibullDistribution01()
|
||||
{
|
||||
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++)
|
||||
fra.CountThis(await dist.NextNumber());
|
||||
fra.CountThis(dist.NextNumber());
|
||||
|
||||
var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
|
||||
|
||||
@ -46,13 +46,13 @@ public class WeibullK05La1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange01()
|
||||
public void TestWeibullGeneratorWithRange01()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(-1.0f, 1.0f);
|
||||
|
||||
Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
|
||||
Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
|
||||
@ -61,13 +61,13 @@ public class WeibullK05La1
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestWeibullGeneratorWithRange02()
|
||||
public void TestWeibullGeneratorWithRange02()
|
||||
{
|
||||
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);
|
||||
samples[n] = dist.NextNumber(0.0f, 1.0f);
|
||||
|
||||
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");
|
||||
|
@ -1,10 +1,8 @@
|
||||
using System;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using FastRng;
|
||||
using FastRng.Distributions;
|
||||
using FastRngTests.Distributions;
|
||||
using NUnit.Framework;
|
||||
|
||||
namespace FastRngTests;
|
||||
@ -17,147 +15,147 @@ public class MultiThreadedRngTests
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Uint()
|
||||
public void TestRange01Uint()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Ulong()
|
||||
public void TestRange01Ulong()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange01Float()
|
||||
public void TestRange01Float()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (n, 100_000 + n), Is.InRange(n, 100_000 + n));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Uint()
|
||||
public void TestRange02Uint()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (5, 5), Is.EqualTo(5));
|
||||
Assert.That(dist.NextNumber (0, 0), Is.EqualTo(0));
|
||||
Assert.That(dist.NextNumber (3_000_000_000, 3_000_000_000), Is.EqualTo(3_000_000_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Ulong()
|
||||
public void TestRange02Ulong()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (5UL, 5), Is.EqualTo(5));
|
||||
Assert.That(dist.NextNumber (0UL, 0), Is.EqualTo(0));
|
||||
Assert.That(dist.NextNumber (3_000_000_000UL, 3_000_000_000), Is.EqualTo(3_000_000_000));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange02Float()
|
||||
public void TestRange02Float()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (5f, 5f), Is.EqualTo(5));
|
||||
Assert.That(dist.NextNumber (0f, 0f), Is.EqualTo(0));
|
||||
Assert.That(dist.NextNumber (3e9f, 3e9f), Is.EqualTo(3e9f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Uint()
|
||||
public void TestRange03Uint()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (5, 6), Is.InRange(5, 6));
|
||||
Assert.That(dist.NextNumber (0, 1), Is.InRange(0, 1));
|
||||
Assert.That(dist.NextNumber (3_000_000_000, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Ulong()
|
||||
public void TestRange03Ulong()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (5UL, 6), Is.InRange(5, 6));
|
||||
Assert.That(dist.NextNumber (0UL, 1), Is.InRange(0, 1));
|
||||
Assert.That(dist.NextNumber (3_000_000_000UL, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange03Float()
|
||||
public void TestRange03Float()
|
||||
{
|
||||
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));
|
||||
Assert.That(dist.NextNumber (5f, 6f), Is.InRange(5f, 6f));
|
||||
Assert.That(dist.NextNumber (0f, 1f), Is.InRange(0f, 1f));
|
||||
Assert.That(dist.NextNumber (3e9f, 3e9f+2f), Is.InRange(3e9f, 3e9f+2f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Uint()
|
||||
public void TestRange04Uint()
|
||||
{
|
||||
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));
|
||||
Assert.That(distUniform.NextNumber(10, 1), Is.InRange(1, 10));
|
||||
Assert.That(distNormal.NextNumber(10, 1), Is.InRange(1, 10));
|
||||
|
||||
Assert.That(await distUniform.NextNumber(20, 1), Is.InRange(1, 20));
|
||||
Assert.That(await distNormal.NextNumber(20, 1), Is.InRange(1, 20));
|
||||
Assert.That(distUniform.NextNumber(20, 1), Is.InRange(1, 20));
|
||||
Assert.That(distNormal.NextNumber(20, 1), Is.InRange(1, 20));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Ulong()
|
||||
public void TestRange04Ulong()
|
||||
{
|
||||
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));
|
||||
Assert.That(distUniform.NextNumber(10UL, 1), Is.InRange(1, 10));
|
||||
Assert.That(distNormal.NextNumber(10UL, 1), Is.InRange(1, 10));
|
||||
|
||||
Assert.That(await distUniform.NextNumber(20UL, 1), Is.InRange(1, 20));
|
||||
Assert.That(await distNormal.NextNumber(20UL, 1), Is.InRange(1, 20));
|
||||
Assert.That(distUniform.NextNumber(20UL, 1), Is.InRange(1, 20));
|
||||
Assert.That(distNormal.NextNumber(20UL, 1), Is.InRange(1, 20));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestRange04Float()
|
||||
public void TestRange04Float()
|
||||
{
|
||||
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));
|
||||
Assert.That(distUniform.NextNumber(10.0f, 1), Is.InRange(1, 10));
|
||||
Assert.That(distNormal.NextNumber(10.0f, 1), Is.InRange(1, 10));
|
||||
|
||||
Assert.That(await distUniform.NextNumber(20.0f, 1), Is.InRange(1, 20));
|
||||
Assert.That(await distNormal.NextNumber(20.0f, 1), Is.InRange(1, 20));
|
||||
Assert.That(distUniform.NextNumber(20.0f, 1), Is.InRange(1, 20));
|
||||
Assert.That(distNormal.NextNumber(20.0f, 1), Is.InRange(1, 20));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.LONG_RUNNING)]
|
||||
public async Task TestRange05()
|
||||
public void TestRange05()
|
||||
{
|
||||
var distUniform = new Uniform<float>(this.rng);
|
||||
var distLorentz = new CauchyLorentzX1<float>(this.rng);
|
||||
@ -173,9 +171,9 @@ public class MultiThreadedRngTests
|
||||
|
||||
for (int i = 0; i < 100_000_000; i++)
|
||||
{
|
||||
var rngValue = await this.rng.GetUniform();
|
||||
var uniform = await distUniform.NextNumber();
|
||||
var lorentz = await distLorentz.NextNumber();
|
||||
var rngValue = this.rng.GetUniform();
|
||||
var uniform = distUniform.NextNumber();
|
||||
var lorentz = distLorentz.NextNumber();
|
||||
|
||||
switch (rngValue)
|
||||
{
|
||||
@ -228,7 +226,7 @@ public class MultiThreadedRngTests
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestStoppingProducers01()
|
||||
public void TestStoppingProducers01()
|
||||
{
|
||||
var rng2 = new MultiThreadedRng<float>();
|
||||
rng2.Dispose();
|
||||
@ -239,7 +237,7 @@ public class MultiThreadedRngTests
|
||||
while(true)
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await rng2.GetUniform(tokenSource.Token);
|
||||
rng2.GetUniform(tokenSource.Token);
|
||||
if (tokenSource.IsCancellationRequested)
|
||||
{
|
||||
wasCanceled = true;
|
||||
@ -256,26 +254,26 @@ public class MultiThreadedRngTests
|
||||
Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
|
||||
|
||||
var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05<float>(rng2).NextNumber(tokenSource2.Token);
|
||||
new NormalS02M05<float>(rng2).NextNumber(tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05<float>(rng2).NextNumber(-1f, 1f, tokenSource2.Token);
|
||||
new NormalS02M05<float>(rng2).NextNumber(-1f, 1f, tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05<float>(rng2).NextNumber(0u, 6u, tokenSource2.Token);
|
||||
new NormalS02M05<float>(rng2).NextNumber(0u, 6u, tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
|
||||
tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
|
||||
await new NormalS02M05<float>(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
|
||||
new NormalS02M05<float>(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
|
||||
Assert.That(tokenSource2.IsCancellationRequested, Is.True);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task OneSeed01()
|
||||
public void OneSeed01()
|
||||
{
|
||||
using var rng1 = new MultiThreadedRng<float>(6);
|
||||
using var rng2 = new MultiThreadedRng<float>(6);
|
||||
@ -283,15 +281,15 @@ public class MultiThreadedRngTests
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
rng1Sample[n] = await rng1.GetUniform();
|
||||
rng1Sample[n] = rng1.GetUniform();
|
||||
|
||||
var rng2Sample = new float[10];
|
||||
for (var n = 0; n < rng2Sample.Length; n++)
|
||||
rng2Sample[n] = await rng2.GetUniform();
|
||||
rng2Sample[n] = rng2.GetUniform();
|
||||
|
||||
var rng3Sample = new float[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
rng3Sample[n] = rng3.GetUniform();
|
||||
|
||||
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@ -301,7 +299,7 @@ public class MultiThreadedRngTests
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TwoSeeds01()
|
||||
public void TwoSeeds01()
|
||||
{
|
||||
using var rng1 = new MultiThreadedRng<float>(3, 6);
|
||||
using var rng2 = new MultiThreadedRng<float>(3, 6);
|
||||
@ -310,19 +308,19 @@ public class MultiThreadedRngTests
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
rng1Sample[n] = await rng1.GetUniform();
|
||||
rng1Sample[n] = rng1.GetUniform();
|
||||
|
||||
var rng2Sample = new float[10];
|
||||
for (var n = 0; n < rng2Sample.Length; n++)
|
||||
rng2Sample[n] = await rng2.GetUniform();
|
||||
rng2Sample[n] = rng2.GetUniform();
|
||||
|
||||
var rng3Sample = new float[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
rng3Sample[n] = rng3.GetUniform();
|
||||
|
||||
var rng4Sample = new float[10];
|
||||
for (var n = 0; n < rng4Sample.Length; n++)
|
||||
rng4Sample[n] = await rng4.GetUniform();
|
||||
rng4Sample[n] = rng4.GetUniform();
|
||||
|
||||
Assert.That(rng1Sample, Is.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@ -335,7 +333,7 @@ public class MultiThreadedRngTests
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task NoSeed01()
|
||||
public void NoSeed01()
|
||||
{
|
||||
using var rng1 = new MultiThreadedRng<float>();
|
||||
using var rng2 = new MultiThreadedRng<float>();
|
||||
@ -343,15 +341,15 @@ public class MultiThreadedRngTests
|
||||
|
||||
var rng1Sample = new float[10];
|
||||
for (var n = 0; n < rng1Sample.Length; n++)
|
||||
rng1Sample[n] = await rng1.GetUniform();
|
||||
rng1Sample[n] = rng1.GetUniform();
|
||||
|
||||
var rng2Sample = new float[10];
|
||||
for (var n = 0; n < rng2Sample.Length; n++)
|
||||
rng2Sample[n] = await rng2.GetUniform();
|
||||
rng2Sample[n] = rng2.GetUniform();
|
||||
|
||||
var rng3Sample = new float[10];
|
||||
for (var n = 0; n < rng3Sample.Length; n++)
|
||||
rng3Sample[n] = await rng3.GetUniform();
|
||||
rng3Sample[n] = rng3.GetUniform();
|
||||
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng2Sample));
|
||||
Assert.That(rng1Sample, Is.Not.EquivalentTo(rng3Sample));
|
||||
@ -361,7 +359,7 @@ public class MultiThreadedRngTests
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCancellation01()
|
||||
public void TestCancellation01()
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource();
|
||||
var token = tokenSource.Token;
|
||||
@ -369,257 +367,257 @@ public class MultiThreadedRngTests
|
||||
|
||||
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));
|
||||
Assert.That(dist.NextNumber (1, 100_000, token), Is.EqualTo(0));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestCancellation02()
|
||||
public void TestCancellation02()
|
||||
{
|
||||
var tokenSource = new CancellationTokenSource();
|
||||
var token = tokenSource.Token;
|
||||
tokenSource.Cancel();
|
||||
|
||||
using var rng2 = new MultiThreadedRng<float>();
|
||||
Assert.That(await rng2.GetUniform(token), Is.NaN);
|
||||
Assert.That(rng2.GetUniform(token), Is.NaN);
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic01()
|
||||
public void TestDeterministic01()
|
||||
{
|
||||
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));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.06033641).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.6822646).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.61201024).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.17746393).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.33456334).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.96167856).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12944269).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.64489424).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.109665975).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.18188846).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.36097932).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.48192585).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.1617974).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.24791045).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.43913218).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.3343723).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9428737).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55195147).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.027495692).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9621458).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55794334).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.69002056).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.86020225).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.88220626).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.68816894).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.8583311).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.003915685).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.83575225).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.12712699).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.5764246).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.06033641).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.6822646).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.61201024).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.17746393).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.33456334).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.96167856).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.12944269).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.64489424).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.109665975).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.18188846).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.36097932).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.48192585).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.1617974).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.24791045).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.43913218).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.3343723).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.9428737).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.55195147).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.027495692).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.9621458).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.55794334).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.69002056).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.86020225).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.88220626).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.68816894).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.8583311).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.003915685).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.83575225).Within(1e-7f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic02()
|
||||
public void TestDeterministic02()
|
||||
{
|
||||
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));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(6));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(68));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(61));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(64));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(36));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(48));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(25));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(44));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(94));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(55));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(86));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(88));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(85));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(83));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(13));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(58));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(6));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(68));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(61));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(18));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(34));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(96));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(13));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(64));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(11));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(19));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(36));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(48));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(17));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(25));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(44));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(34));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(94));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(55));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(3));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(96));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(56));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(69));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(86));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(88));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(69));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(85));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(83));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic03()
|
||||
public void TestDeterministic03()
|
||||
{
|
||||
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));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(14));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(65));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(37));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(12));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(8));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(20));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(84));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(11));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(17));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(2));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(18));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(14));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(65));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(11));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(22));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(3));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(37));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(9));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(12));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(4));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(10));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(8));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(22));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(2));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(3));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(20));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(4));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(84));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(9));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(19));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(2));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(10));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(4));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(56));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic01b()
|
||||
public void TestDeterministic01b()
|
||||
{
|
||||
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));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.06033641).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.6822646).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.61201024).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.17746393).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.33456334).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.96167856).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.12944269).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.64489424).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.109665975).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.18188846).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.36097932).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.48192585).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.1617974).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.24791045).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.43913218).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.3343723).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9428737).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55195147).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.027495692).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.9621458).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.55794334).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.69002056).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.86020225).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.88220626).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.68816894).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.8583311).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.003915685).Within(1e-7f));
|
||||
Assert.That(await rng2.GetUniform(), Is.EqualTo(0.83575225).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.12712699).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.5764246).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.06033641).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.6822646).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.61201024).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.17746393).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.33456334).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.96167856).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.12944269).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.64489424).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.109665975).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.18188846).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.36097932).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.48192585).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.1617974).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.24791045).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.43913218).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.3343723).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.9428737).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.55195147).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.027495692).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.9621458).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.55794334).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.69002056).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.86020225).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.88220626).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.68816894).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.8583311).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.003915685).Within(1e-7f));
|
||||
Assert.That(rng2.GetUniform(), Is.EqualTo(0.83575225).Within(1e-7f));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic02b()
|
||||
public void TestDeterministic02b()
|
||||
{
|
||||
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));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(6));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(68));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(61));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(64));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(36));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(48));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(25));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(44));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(94));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(55));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(86));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(88));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(85));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(83));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(13));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(58));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(6));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(68));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(61));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(18));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(34));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(96));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(13));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(64));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(11));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(19));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(36));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(48));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(17));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(25));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(44));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(34));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(94));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(55));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(3));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(96));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(56));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(69));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(86));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(88));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(69));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(85));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(83));
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.COVER)]
|
||||
[Category(TestCategories.NORMAL)]
|
||||
public async Task TestDeterministic03b()
|
||||
public void TestDeterministic03b()
|
||||
{
|
||||
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));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(14));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(65));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(37));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(12));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(8));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(20));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(84));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4));
|
||||
Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(11));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(17));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(2));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(18));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(14));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(65));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(11));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(22));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(3));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(37));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(9));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(12));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(4));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(10));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(8));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(22));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(2));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(3));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(20));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(4));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(84));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(9));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(19));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(2));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(1));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(10));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(4));
|
||||
Assert.That(dist.NextNumber (1, 100), Is.EqualTo(56));
|
||||
}
|
||||
}
|
@ -18,7 +18,7 @@ public class PerformanceTests
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.PERFORMANCE)]
|
||||
public async Task Generate1MUniform()
|
||||
public async Task Generate1MUniformMultiThreaded()
|
||||
{
|
||||
using var rng = new MultiThreadedRng<float>();
|
||||
var data = new float[1_000_000];
|
||||
@ -27,7 +27,25 @@ public class PerformanceTests
|
||||
|
||||
stopwatch.Start();
|
||||
for (uint n = 0; n < data.Length; n++)
|
||||
data[n] = await rng.GetUniform();
|
||||
data[n] = rng.GetUniform();
|
||||
|
||||
stopwatch.Stop();
|
||||
|
||||
TestContext.WriteLine($"Generated 1M uniform distributed random numbers in {stopwatch.Elapsed.Minutes} minute(s), {stopwatch.Elapsed.Seconds} second(s), and {stopwatch.Elapsed.Milliseconds} milliseconds.");
|
||||
}
|
||||
|
||||
[Test]
|
||||
[Category(TestCategories.PERFORMANCE)]
|
||||
public async Task Generate1MUniformMultiChannel()
|
||||
{
|
||||
using var rng = new MultiChannelRng<float>();
|
||||
var data = new float[1_000_000];
|
||||
var stopwatch = new Stopwatch();
|
||||
Thread.Sleep(TimeSpan.FromSeconds(10)); // Warm-up phase of generator
|
||||
|
||||
stopwatch.Start();
|
||||
for (uint n = 0; n < data.Length; n++)
|
||||
data[n] = rng.GetUniform();
|
||||
|
||||
stopwatch.Stop();
|
||||
|
||||
@ -46,7 +64,7 @@ public class PerformanceTests
|
||||
|
||||
stopwatch.Start();
|
||||
for (uint n = 0; n < data.Length; n++)
|
||||
data[n] = await dist.NextNumber();
|
||||
data[n] = dist.NextNumber();
|
||||
|
||||
stopwatch.Stop();
|
||||
|
||||
@ -65,7 +83,7 @@ public class PerformanceTests
|
||||
|
||||
stopwatch.Start();
|
||||
for (uint n = 0; n < data.Length; n++)
|
||||
data[n] = await dist.NextNumber();
|
||||
data[n] = dist.NextNumber();
|
||||
|
||||
stopwatch.Stop();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user