diff --git a/FastRng/Distributions/Distribution.cs b/FastRng/Distributions/Distribution.cs index bdd2cc3..6134ad9 100644 --- a/FastRng/Distributions/Distribution.cs +++ b/FastRng/Distributions/Distribution.cs @@ -19,46 +19,46 @@ public abstract class Distribution : IDistribution where TNum : IFlo private protected abstract TNum ShapeFunction(TNum x); - public async ValueTask GetDistributedValue(CancellationToken token = default) => await this.fitter.NextNumber(token); + public TNum GetDistributedValue(CancellationToken token = default) => this.fitter.NextNumber(token); - public async ValueTask 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 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 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 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 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; } } \ No newline at end of file diff --git a/FastRng/Distributions/IDistribution.cs b/FastRng/Distributions/IDistribution.cs index 8c0abb3..ec214bf 100644 --- a/FastRng/Distributions/IDistribution.cs +++ b/FastRng/Distributions/IDistribution.cs @@ -6,15 +6,15 @@ namespace FastRng.Distributions; public interface IDistribution where TNum : IFloatingPointIeee754 { - public ValueTask GetDistributedValue(CancellationToken token); + public TNum GetDistributedValue(CancellationToken token = default); - public ValueTask NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default); + public uint NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default); - public ValueTask NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default); + public ulong NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default); - public ValueTask NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default); + public TNum NextNumber(TNum rangeStart, TNum rangeEnd, CancellationToken cancel = default); - public ValueTask NextNumber(CancellationToken cancel = default); + public TNum NextNumber(CancellationToken cancel = default); - public ValueTask HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default); + public bool HasDecisionBeenMade(TNum above, TNum below, CancellationToken cancel = default); } \ No newline at end of file diff --git a/FastRng/Distributions/Uniform.cs b/FastRng/Distributions/Uniform.cs index b03e36a..62759cf 100644 --- a/FastRng/Distributions/Uniform.cs +++ b/FastRng/Distributions/Uniform.cs @@ -14,46 +14,46 @@ public sealed class Uniform : IDistribution where TNum : IFloatingPo this.rng = rng ?? throw new ArgumentNullException(nameof(rng), "An IRandom implementation is needed."); } - public async ValueTask GetDistributedValue(CancellationToken token = default) => await this.rng.GetUniform(token); + public TNum GetDistributedValue(CancellationToken token = default) => this.rng.GetUniform(token); - public async ValueTask 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 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 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 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 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; } } \ No newline at end of file diff --git a/FastRng/IRandom.cs b/FastRng/IRandom.cs index 430c25a..207f157 100644 --- a/FastRng/IRandom.cs +++ b/FastRng/IRandom.cs @@ -18,6 +18,5 @@ public interface IRandom : 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. /// - /// An optional cancellation token. - public ValueTask GetUniform(CancellationToken cancel = default); + public TNum GetUniform(CancellationToken cancel = default); } \ No newline at end of file diff --git a/FastRng/MultiThreadedRng.cs b/FastRng/MultiThreadedRng.cs index 3f27c67..4f0ccc2 100644 --- a/FastRng/MultiThreadedRng.cs +++ b/FastRng/MultiThreadedRng.cs @@ -29,15 +29,19 @@ namespace FastRng; public sealed class MultiThreadedRng : IRandom, IDisposable where TNum : IFloatingPointIeee754, IAdditionOperators { #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 : IRandom, 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 : IRandom, 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; @@ -246,7 +250,7 @@ public sealed class MultiThreadedRng : IRandom, IDisposable where TN #endregion #region Implementing interface - + /// /// Returns a uniform distributed pseudo-random number from the interval (0,1]. /// This means, the result 0 is impossible, whereas 1 is possible. @@ -255,95 +259,54 @@ public sealed class MultiThreadedRng : IRandom, IDisposable where TN /// This method is thread-safe. You can consume numbers from the same generator /// by using multiple threads at the same time. /// - /// An optional cancellation token. - public async ValueTask GetUniform(CancellationToken cancel = default) + public TNum GetUniform(CancellationToken cancel = default) { - while (!cancel.IsCancellationRequested) + if (cancel.IsCancellationRequested) + return TNum.NaN; + + Start: + + // Check if we have to load the next buffer: + if (this.currentBufferPointer >= BUFFER_SIZE) { - // Check, if we need a new buffer to read from: - if (this.currentBufferPointer >= BUFFER_SIZE) + // 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) { - // Create a local copy of the current buffer's pointer: - var currentBufferReference = this.currentBuffer; - - // Here, we store the next buffer until we implement it: - var nextBuffer = Array.Empty(); - - // Try to get the next buffer from the queue: - while (this.currentBufferPointer >= BUFFER_SIZE && currentBufferReference == this.currentBuffer && !this.queueFloats.TryDequeue(out nextBuffer)) + // 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; + + 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. - // - this.currentBufferPointer = 0; - - // Next? We can go ahead and yield a random number... - } + // Reset the pointer for the next thread or call: + this.currentBufferPointer = 0; } - - // Made a local copy of the current pointer: - var myPointer = this.currentBufferPointer; - - // Increment the pointer for the next thread or call: - var nextPointer = myPointer + 1; - - // Try to update the pointer without locking other threads: - if (Interlocked.CompareExchange(ref this.currentBufferPointer, nextPointer, myPointer) == myPointer) - { - // - // Case: Success. We updated the pointer and, thus, can use the pointer to read a number. - // - return this.currentBuffer[myPointer]; - } - - // - // Case: Another thread updated the pointer already. Must restart the process - // to get a random number. - // } + + // Made a local copy of the current pointer: + var myPointer = this.currentBufferPointer; + + // Increment the pointer for the next thread or call: + var nextPointer = myPointer + 1; + + // Try to update the pointer without locking other threads: + if (Interlocked.CompareExchange(ref this.currentBufferPointer, nextPointer, myPointer) != myPointer) + goto Start; // - // Case: The consumer cancelled the request. + // Case: Success. We updated the pointer and, thus, can use the read number. // - return TNum.NaN; + return this.currentBuffer[myPointer]; } private void StopProducer() => this.producerTokenSource.Cancel(); diff --git a/FastRng/ShapeFitter.cs b/FastRng/ShapeFitter.cs index bdb51c8..77b3945 100644 --- a/FastRng/ShapeFitter.cs +++ b/FastRng/ShapeFitter.cs @@ -50,11 +50,11 @@ public sealed class ShapeFitter where TNum : IFloatingPointIeee754, /// /// An optional cancellation token. /// The next value regarding the given shape. - public async ValueTask 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 where TNum : IFloatingPointIeee754, 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; diff --git a/FastRngTests/DecisionTester.cs b/FastRngTests/DecisionTester.cs index d48b416..e584522 100644 --- a/FastRngTests/DecisionTester.cs +++ b/FastRngTests/DecisionTester.cs @@ -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(); diff --git a/FastRngTests/Distributions/BetaA2B2.cs b/FastRngTests/Distributions/BetaA2B2.cs index 24887b8..10bc7b2 100644 --- a/FastRngTests/Distributions/BetaA2B2.cs +++ b/FastRngTests/Distributions/BetaA2B2.cs @@ -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(); var dist = new FastRng.Distributions.BetaA2B2(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.BetaA2B2(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.BetaA2B2(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"); diff --git a/FastRngTests/Distributions/BetaA2B5.cs b/FastRngTests/Distributions/BetaA2B5.cs index 5710d58..d05fd43 100644 --- a/FastRngTests/Distributions/BetaA2B5.cs +++ b/FastRngTests/Distributions/BetaA2B5.cs @@ -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(); var dist = new FastRng.Distributions.BetaA2B5(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.BetaA2B5(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.BetaA2B5(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"); diff --git a/FastRngTests/Distributions/BetaA5B2.cs b/FastRngTests/Distributions/BetaA5B2.cs index b7ed5cf..6e07dec 100644 --- a/FastRngTests/Distributions/BetaA5B2.cs +++ b/FastRngTests/Distributions/BetaA5B2.cs @@ -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(); var dist = new FastRng.Distributions.BetaA5B2(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.BetaA5B2(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.BetaA5B2(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"); diff --git a/FastRngTests/Distributions/CauchyLorentzX0.cs b/FastRngTests/Distributions/CauchyLorentzX0.cs index 1555c79..6df07d0 100644 --- a/FastRngTests/Distributions/CauchyLorentzX0.cs +++ b/FastRngTests/Distributions/CauchyLorentzX0.cs @@ -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(); var dist = new FastRng.Distributions.CauchyLorentzX0(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(); var dist = new FastRng.Distributions.CauchyLorentzX0(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"); diff --git a/FastRngTests/Distributions/CauchyLorentzX1.cs b/FastRngTests/Distributions/CauchyLorentzX1.cs index 68dcb6c..68ec7e3 100644 --- a/FastRngTests/Distributions/CauchyLorentzX1.cs +++ b/FastRngTests/Distributions/CauchyLorentzX1.cs @@ -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(); var dist = new FastRng.Distributions.CauchyLorentzX0(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(); var dist = new FastRng.Distributions.CauchyLorentzX0(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"); diff --git a/FastRngTests/Distributions/ChiSquareK1.cs b/FastRngTests/Distributions/ChiSquareK1.cs index 52cc2a6..3bf9f39 100644 --- a/FastRngTests/Distributions/ChiSquareK1.cs +++ b/FastRngTests/Distributions/ChiSquareK1.cs @@ -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(); var dist = new FastRng.Distributions.ChiSquareK1(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(); var dist = new FastRng.Distributions.ChiSquareK1(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(); var dist = new FastRng.Distributions.ChiSquareK1(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"); diff --git a/FastRngTests/Distributions/ChiSquareK10.cs b/FastRngTests/Distributions/ChiSquareK10.cs index 3b97cc1..d90945b 100644 --- a/FastRngTests/Distributions/ChiSquareK10.cs +++ b/FastRngTests/Distributions/ChiSquareK10.cs @@ -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(); var dist = new FastRng.Distributions.ChiSquareK10(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(); var dist = new FastRng.Distributions.ChiSquareK10(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(); var dist = new FastRng.Distributions.ChiSquareK10(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"); diff --git a/FastRngTests/Distributions/ChiSquareK4.cs b/FastRngTests/Distributions/ChiSquareK4.cs index 9481227..aca1463 100644 --- a/FastRngTests/Distributions/ChiSquareK4.cs +++ b/FastRngTests/Distributions/ChiSquareK4.cs @@ -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(); var dist = new FastRng.Distributions.ChiSquareK4(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(); var dist = new FastRng.Distributions.ChiSquareK4(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(); var dist = new FastRng.Distributions.ChiSquareK4(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"); diff --git a/FastRngTests/Distributions/ExponentialLa10.cs b/FastRngTests/Distributions/ExponentialLa10.cs index 7cd47fa..69ecdea 100644 --- a/FastRngTests/Distributions/ExponentialLa10.cs +++ b/FastRngTests/Distributions/ExponentialLa10.cs @@ -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(); var dist = new FastRng.Distributions.ExponentialLa10(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(); var dist = new FastRng.Distributions.ExponentialLa10(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(); var dist = new FastRng.Distributions.ExponentialLa10(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"); diff --git a/FastRngTests/Distributions/ExponentialLa5.cs b/FastRngTests/Distributions/ExponentialLa5.cs index 05ebd02..f2465e9 100644 --- a/FastRngTests/Distributions/ExponentialLa5.cs +++ b/FastRngTests/Distributions/ExponentialLa5.cs @@ -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(); var dist = new FastRng.Distributions.ExponentialLa5(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(); var dist = new FastRng.Distributions.ExponentialLa5(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(); var dist = new FastRng.Distributions.ExponentialLa5(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"); diff --git a/FastRngTests/Distributions/GammaA5B15.cs b/FastRngTests/Distributions/GammaA5B15.cs index 56c04c9..53ca50c 100644 --- a/FastRngTests/Distributions/GammaA5B15.cs +++ b/FastRngTests/Distributions/GammaA5B15.cs @@ -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(); var dist = new FastRng.Distributions.GammaA5B15(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(); var dist = new FastRng.Distributions.GammaA5B15(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(); var dist = new FastRng.Distributions.GammaA5B15(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"); diff --git a/FastRngTests/Distributions/InverseExponentialLa10.cs b/FastRngTests/Distributions/InverseExponentialLa10.cs index aeed203..8f148ba 100644 --- a/FastRngTests/Distributions/InverseExponentialLa10.cs +++ b/FastRngTests/Distributions/InverseExponentialLa10.cs @@ -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(); var dist = new FastRng.Distributions.InverseExponentialLa10(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(); var dist = new FastRng.Distributions.InverseExponentialLa10(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(); var dist = new FastRng.Distributions.InverseExponentialLa10(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"); diff --git a/FastRngTests/Distributions/InverseExponentialLa5.cs b/FastRngTests/Distributions/InverseExponentialLa5.cs index 1987d3d..de779b3 100644 --- a/FastRngTests/Distributions/InverseExponentialLa5.cs +++ b/FastRngTests/Distributions/InverseExponentialLa5.cs @@ -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(); var dist = new FastRng.Distributions.InverseExponentialLa5(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(); var dist = new FastRng.Distributions.InverseExponentialLa5(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(); var dist = new FastRng.Distributions.InverseExponentialLa5(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"); diff --git a/FastRngTests/Distributions/InverseGammaA3B05.cs b/FastRngTests/Distributions/InverseGammaA3B05.cs index 5ff6244..e8973bc 100644 --- a/FastRngTests/Distributions/InverseGammaA3B05.cs +++ b/FastRngTests/Distributions/InverseGammaA3B05.cs @@ -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(); var dist = new FastRng.Distributions.InverseGammaA3B05(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(); var dist = new FastRng.Distributions.InverseGammaA3B05(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(); var dist = new FastRng.Distributions.InverseGammaA3B05(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"); diff --git a/FastRngTests/Distributions/LaplaceB01M0.cs b/FastRngTests/Distributions/LaplaceB01M0.cs index 3f3f6d5..1f8a60a 100644 --- a/FastRngTests/Distributions/LaplaceB01M0.cs +++ b/FastRngTests/Distributions/LaplaceB01M0.cs @@ -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(); var dist = new FastRng.Distributions.LaplaceB01M0(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(); var dist = new FastRng.Distributions.LaplaceB01M0(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(); var dist = new FastRng.Distributions.LaplaceB01M0(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"); diff --git a/FastRngTests/Distributions/LaplaceB01M05.cs b/FastRngTests/Distributions/LaplaceB01M05.cs index d287262..e35a49e 100644 --- a/FastRngTests/Distributions/LaplaceB01M05.cs +++ b/FastRngTests/Distributions/LaplaceB01M05.cs @@ -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(); var dist = new FastRng.Distributions.LaplaceB01M05(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(); var dist = new FastRng.Distributions.LaplaceB01M05(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(); var dist = new FastRng.Distributions.LaplaceB01M05(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"); diff --git a/FastRngTests/Distributions/LogNormalS1M0.cs b/FastRngTests/Distributions/LogNormalS1M0.cs index 86e88d8..8239362 100644 --- a/FastRngTests/Distributions/LogNormalS1M0.cs +++ b/FastRngTests/Distributions/LogNormalS1M0.cs @@ -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(); var dist = new FastRng.Distributions.LogNormalS1M0(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(); var dist = new FastRng.Distributions.LogNormalS1M0(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(); var dist = new FastRng.Distributions.LogNormalS1M0(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"); diff --git a/FastRngTests/Distributions/NormalS02M05.cs b/FastRngTests/Distributions/NormalS02M05.cs index faf2d71..52ed445 100644 --- a/FastRngTests/Distributions/NormalS02M05.cs +++ b/FastRngTests/Distributions/NormalS02M05.cs @@ -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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.NormalS02M05(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.NormalS02M05(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"); diff --git a/FastRngTests/Distributions/StudentTNu1.cs b/FastRngTests/Distributions/StudentTNu1.cs index 219cf31..13141fc 100644 --- a/FastRngTests/Distributions/StudentTNu1.cs +++ b/FastRngTests/Distributions/StudentTNu1.cs @@ -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(); var dist = new FastRng.Distributions.StudentTNu1(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(); var dist = new FastRng.Distributions.StudentTNu1(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(); var dist = new FastRng.Distributions.StudentTNu1(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"); diff --git a/FastRngTests/Distributions/Uniform.cs b/FastRngTests/Distributions/Uniform.cs index 913229a..42b7b52 100644 --- a/FastRngTests/Distributions/Uniform.cs +++ b/FastRngTests/Distributions/Uniform.cs @@ -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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.Uniform(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(); var samples = new float[1_000]; var dist = new FastRng.Distributions.Uniform(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(); 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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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(); var dist = new FastRng.Distributions.Uniform(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)); } diff --git a/FastRngTests/Distributions/WeibullK05La1.cs b/FastRngTests/Distributions/WeibullK05La1.cs index 456276d..c4b3fd2 100644 --- a/FastRngTests/Distributions/WeibullK05La1.cs +++ b/FastRngTests/Distributions/WeibullK05La1.cs @@ -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(); var dist = new FastRng.Distributions.WeibullK05La1(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(); var dist = new FastRng.Distributions.WeibullK05La1(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(); var dist = new FastRng.Distributions.WeibullK05La1(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"); diff --git a/FastRngTests/MultiThreadedRngTests.cs b/FastRngTests/MultiThreadedRngTests.cs index 310ff5f..ae9cc83 100644 --- a/FastRngTests/MultiThreadedRngTests.cs +++ b/FastRngTests/MultiThreadedRngTests.cs @@ -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(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(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(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(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(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(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(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(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(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(this.rng); var distNormal = new NormalS02M05(this.rng); - Assert.That(await distUniform.NextNumber(10, 1), Is.InRange(1, 10)); - Assert.That(await distNormal.NextNumber(10, 1), Is.InRange(1, 10)); + Assert.That(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(this.rng); var distNormal = new NormalS02M05(this.rng); - Assert.That(await distUniform.NextNumber(10UL, 1), Is.InRange(1, 10)); - Assert.That(await distNormal.NextNumber(10UL, 1), Is.InRange(1, 10)); + Assert.That(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(this.rng); var distNormal = new NormalS02M05(this.rng); - Assert.That(await distUniform.NextNumber(10.0f, 1), Is.InRange(1, 10)); - Assert.That(await distNormal.NextNumber(10.0f, 1), Is.InRange(1, 10)); + Assert.That(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(this.rng); var distLorentz = new CauchyLorentzX1(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(); 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(rng2).NextNumber(tokenSource2.Token); + new NormalS02M05(rng2).NextNumber(tokenSource2.Token); Assert.That(tokenSource2.IsCancellationRequested, Is.True); tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3)); - await new NormalS02M05(rng2).NextNumber(-1f, 1f, tokenSource2.Token); + new NormalS02M05(rng2).NextNumber(-1f, 1f, tokenSource2.Token); Assert.That(tokenSource2.IsCancellationRequested, Is.True); tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3)); - await new NormalS02M05(rng2).NextNumber(0u, 6u, tokenSource2.Token); + new NormalS02M05(rng2).NextNumber(0u, 6u, tokenSource2.Token); Assert.That(tokenSource2.IsCancellationRequested, Is.True); tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3)); - await new NormalS02M05(rng2).NextNumber(0ul, 6ul, tokenSource2.Token); + new NormalS02M05(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(6); using var rng2 = new MultiThreadedRng(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(3, 6); using var rng2 = new MultiThreadedRng(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(); using var rng2 = new MultiThreadedRng(); @@ -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(); var dist = new Uniform(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(); - 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(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(16); var dist = new Uniform(rng2); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(58)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(6)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(68)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(61)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(64)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(36)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(48)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(25)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(44)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(94)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(55)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(86)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(88)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(85)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(83)); + 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(16); var dist = new CauchyLorentzX0(rng2); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(14)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(65)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(37)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(12)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(8)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(20)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(84)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56)); + 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(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(16, 362_436_069); var dist = new Uniform(rng2); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(58)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(6)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(68)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(61)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(13)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(64)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(36)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(48)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(25)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(44)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(34)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(94)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(55)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(96)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(86)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(88)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(69)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(85)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(83)); + 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(16, 362_436_069); var dist = new CauchyLorentzX0(rng2); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(17)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(18)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(14)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(65)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(11)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(37)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(12)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(8)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(22)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(3)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(20)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(84)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(9)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(19)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(2)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(1)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(10)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(4)); - Assert.That(await dist.NextNumber(1, 100), Is.EqualTo(56)); + 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)); } } \ No newline at end of file diff --git a/FastRngTests/PerformanceTests.cs b/FastRngTests/PerformanceTests.cs index 26e7114..f0b151e 100644 --- a/FastRngTests/PerformanceTests.cs +++ b/FastRngTests/PerformanceTests.cs @@ -18,7 +18,7 @@ public class PerformanceTests [Test] [Category(TestCategories.PERFORMANCE)] - public async Task Generate1MUniform() + public async Task Generate1MUniformMultiThreaded() { using var rng = new MultiThreadedRng(); 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(); + 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(); @@ -43,10 +61,10 @@ public class PerformanceTests 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] = 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();