Refactored NextNumber into distributions
This commit is contained in:
		
							parent
							
								
									44abcc48b6
								
							
						
					
					
						commit
						0f724991cd
					
				@ -21,5 +21,49 @@ namespace FastRng.Double.Distributions
 | 
				
			|||||||
        protected abstract double ShapeFunction(double x);
 | 
					        protected abstract double ShapeFunction(double x);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public async ValueTask<double> GetDistributedValue(CancellationToken token = default) => await this.fitter.NextNumber(token);
 | 
					        public async ValueTask<double> GetDistributedValue(CancellationToken token = default) => await this.fitter.NextNumber(token);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (uint) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (ulong) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<double> NextNumber(double rangeStart, double rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (distributedValue * range) + rangeStart;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<double> NextNumber(CancellationToken cancel = default) => await this.NextNumber(0.0, 1.0, cancel);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -6,5 +6,13 @@ namespace FastRng.Double.Distributions
 | 
				
			|||||||
    public interface IDistribution
 | 
					    public interface IDistribution
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public ValueTask<double> GetDistributedValue(CancellationToken token);
 | 
					        public ValueTask<double> GetDistributedValue(CancellationToken token);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<double> NextNumber(double rangeStart, double rangeEnd, CancellationToken cancel = default);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<double> NextNumber(CancellationToken cancel = default);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -17,5 +17,49 @@ namespace FastRng.Double.Distributions
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public async ValueTask<double> GetDistributedValue(CancellationToken token = default) => await this.rng.GetUniform(token);
 | 
					        public async ValueTask<double> GetDistributedValue(CancellationToken token = default) => await this.rng.GetUniform(token);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (uint) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (ulong) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<double> NextNumber(double rangeStart, double rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (distributedValue * range) + rangeStart;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<double> NextNumber(CancellationToken cancel = default) => await this.NextNumber(0.0, 1.0, cancel);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,21 +1,12 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using FastRng.Double.Distributions;
 | 
					using FastRng.Double.Distributions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FastRng.Double
 | 
					namespace FastRng.Double
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public interface IRandom
 | 
					    public interface IRandom : IDisposable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public ValueTask<double> GetUniform(CancellationToken cancel = default);
 | 
					        public ValueTask<double> GetUniform(CancellationToken cancel = default);
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<double> NextNumber(double rangeStart, double rangeEnd, IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<double> NextNumber(IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void StopProducer();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -299,51 +299,7 @@ namespace FastRng.Double
 | 
				
			|||||||
            return double.NaN;
 | 
					            return double.NaN;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, IDistribution distribution, CancellationToken cancel = default)
 | 
					        private void StopProducer() => this.producerTokenSource.Cancel();
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (rangeStart > rangeEnd)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var tmp = rangeStart;
 | 
					 | 
				
			||||||
                rangeStart = rangeEnd;
 | 
					 | 
				
			||||||
                rangeEnd = tmp;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            var range = rangeEnd - rangeStart;
 | 
					 | 
				
			||||||
            var distributedValue = await distribution.GetDistributedValue(cancel);
 | 
					 | 
				
			||||||
            return (uint) ((distributedValue * range) + rangeStart);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, IDistribution distribution, CancellationToken cancel = default(CancellationToken))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (rangeStart > rangeEnd)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var tmp = rangeStart;
 | 
					 | 
				
			||||||
                rangeStart = rangeEnd;
 | 
					 | 
				
			||||||
                rangeEnd = tmp;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            var range = rangeEnd - rangeStart;
 | 
					 | 
				
			||||||
            var distributedValue = await distribution.GetDistributedValue(cancel);
 | 
					 | 
				
			||||||
            return (ulong) ((distributedValue * range) + rangeStart);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public async ValueTask<double> NextNumber(double rangeStart, double rangeEnd, IDistribution distribution, CancellationToken cancel = default(CancellationToken))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (rangeStart > rangeEnd)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var tmp = rangeStart;
 | 
					 | 
				
			||||||
                rangeStart = rangeEnd;
 | 
					 | 
				
			||||||
                rangeEnd = tmp;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            var range = rangeEnd - rangeStart;
 | 
					 | 
				
			||||||
            var distributedValue = await distribution.GetDistributedValue(cancel);
 | 
					 | 
				
			||||||
            return (distributedValue * range) + rangeStart;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public async ValueTask<double> NextNumber(IDistribution distribution, CancellationToken cancel = default) => await this.NextNumber(0.0, 1.0, distribution, cancel);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void StopProducer() => this.producerTokenSource.Cancel();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void Dispose() => this.StopProducer();
 | 
					        public void Dispose() => this.StopProducer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -52,7 +52,7 @@ namespace FastRng.Double
 | 
				
			|||||||
                    nextBucket = this.probabilities.Length - 1;
 | 
					                    nextBucket = this.probabilities.Length - 1;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                var threshold = this.probabilities[nextBucket];
 | 
					                var threshold = this.probabilities[nextBucket];
 | 
				
			||||||
                var y = await this.rng.NextNumber(0.0d, this.max, this.uniform, token);
 | 
					                var y = await this.uniform.NextNumber(0.0d, this.max, token);
 | 
				
			||||||
                if (double.IsNaN(y))
 | 
					                if (double.IsNaN(y))
 | 
				
			||||||
                    return y;
 | 
					                    return y;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
 | 
				
			|||||||
@ -21,5 +21,49 @@ namespace FastRng.Float.Distributions
 | 
				
			|||||||
        protected abstract float ShapeFunction(float x);
 | 
					        protected abstract float ShapeFunction(float x);
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public async ValueTask<float> GetDistributedValue(CancellationToken token = default) => await this.fitter.NextNumber(token);
 | 
					        public async ValueTask<float> GetDistributedValue(CancellationToken token = default) => await this.fitter.NextNumber(token);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (uint) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (ulong) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<float> NextNumber(float rangeStart, float rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (distributedValue * range) + rangeStart;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<float> NextNumber(CancellationToken cancel = default) => await this.NextNumber(0.0f, 1.0f, cancel);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -6,5 +6,13 @@ namespace FastRng.Float.Distributions
 | 
				
			|||||||
    public interface IDistribution
 | 
					    public interface IDistribution
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public ValueTask<float> GetDistributedValue(CancellationToken token);
 | 
					        public ValueTask<float> GetDistributedValue(CancellationToken token);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<float> NextNumber(float rangeStart, float rangeEnd, CancellationToken cancel = default);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public ValueTask<float> NextNumber(CancellationToken cancel = default);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -17,5 +17,49 @@ namespace FastRng.Float.Distributions
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async ValueTask<float> GetDistributedValue(CancellationToken token = default) => await this.rng.GetUniform(token);
 | 
					        public async ValueTask<float> GetDistributedValue(CancellationToken token = default) => await this.rng.GetUniform(token);
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, CancellationToken cancel = default)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (uint) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (ulong) ((distributedValue * range) + rangeStart);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<float> NextNumber(float rangeStart, float rangeEnd, CancellationToken cancel = default(CancellationToken))
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (rangeStart > rangeEnd)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var tmp = rangeStart;
 | 
				
			||||||
 | 
					                rangeStart = rangeEnd;
 | 
				
			||||||
 | 
					                rangeEnd = tmp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            var range = rangeEnd - rangeStart;
 | 
				
			||||||
 | 
					            var distributedValue = await this.GetDistributedValue(cancel);
 | 
				
			||||||
 | 
					            return (distributedValue * range) + rangeStart;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        public async ValueTask<float> NextNumber(CancellationToken cancel = default) => await this.NextNumber(0.0f, 1.0f, cancel);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -1,21 +1,12 @@
 | 
				
			|||||||
 | 
					using System;
 | 
				
			||||||
using System.Threading;
 | 
					using System.Threading;
 | 
				
			||||||
using System.Threading.Tasks;
 | 
					using System.Threading.Tasks;
 | 
				
			||||||
using FastRng.Float.Distributions;
 | 
					using FastRng.Float.Distributions;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace FastRng.Float
 | 
					namespace FastRng.Float
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    public interface IRandom
 | 
					    public interface IRandom : IDisposable
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        public ValueTask<float> GetUniform(CancellationToken cancel = default);
 | 
					        public ValueTask<float> GetUniform(CancellationToken cancel = default);
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<float> NextNumber(float rangeStart, float rangeEnd, IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        public ValueTask<float> NextNumber(IDistribution distribution, CancellationToken cancel = default);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void StopProducer();
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -299,51 +299,7 @@ namespace FastRng.Float
 | 
				
			|||||||
            return float.NaN;
 | 
					            return float.NaN;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        public async ValueTask<uint> NextNumber(uint rangeStart, uint rangeEnd, IDistribution distribution, CancellationToken cancel = default)
 | 
					        private void StopProducer() => this.producerTokenSource.Cancel();
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (rangeStart > rangeEnd)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var tmp = rangeStart;
 | 
					 | 
				
			||||||
                rangeStart = rangeEnd;
 | 
					 | 
				
			||||||
                rangeEnd = tmp;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            var range = rangeEnd - rangeStart;
 | 
					 | 
				
			||||||
            var distributedValue = await distribution.GetDistributedValue(cancel);
 | 
					 | 
				
			||||||
            return (uint) ((distributedValue * range) + rangeStart);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public async ValueTask<ulong> NextNumber(ulong rangeStart, ulong rangeEnd, IDistribution distribution, CancellationToken cancel = default(CancellationToken))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (rangeStart > rangeEnd)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var tmp = rangeStart;
 | 
					 | 
				
			||||||
                rangeStart = rangeEnd;
 | 
					 | 
				
			||||||
                rangeEnd = tmp;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            var range = rangeEnd - rangeStart;
 | 
					 | 
				
			||||||
            var distributedValue = await distribution.GetDistributedValue(cancel);
 | 
					 | 
				
			||||||
            return (ulong) ((distributedValue * range) + rangeStart);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public async ValueTask<float> NextNumber(float rangeStart, float rangeEnd, IDistribution distribution, CancellationToken cancel = default(CancellationToken))
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (rangeStart > rangeEnd)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                var tmp = rangeStart;
 | 
					 | 
				
			||||||
                rangeStart = rangeEnd;
 | 
					 | 
				
			||||||
                rangeEnd = tmp;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            
 | 
					 | 
				
			||||||
            var range = rangeEnd - rangeStart;
 | 
					 | 
				
			||||||
            var distributedValue = await distribution.GetDistributedValue(cancel);
 | 
					 | 
				
			||||||
            return (distributedValue * range) + rangeStart;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public async ValueTask<float> NextNumber(IDistribution distribution, CancellationToken cancel = default) => await this.NextNumber(0.0f, 1.0f, distribution, cancel);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        public void StopProducer() => this.producerTokenSource.Cancel();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public void Dispose() => this.StopProducer();
 | 
					        public void Dispose() => this.StopProducer();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -51,7 +51,7 @@ namespace FastRng.Float
 | 
				
			|||||||
                    nextBucket = this.probabilities.Length - 1;
 | 
					                    nextBucket = this.probabilities.Length - 1;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                var threshold = this.probabilities[nextBucket];
 | 
					                var threshold = this.probabilities[nextBucket];
 | 
				
			||||||
                var y = await this.rng.NextNumber(0.0f, this.max, this.uniform, token);
 | 
					                var y = await this.uniform.NextNumber(0.0f, this.max, token);
 | 
				
			||||||
                if (float.IsNaN(y))
 | 
					                if (float.IsNaN(y))
 | 
				
			||||||
                    return y;
 | 
					                    return y;
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
 | 
					            var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
 | 
					            var dist = new FastRng.Double.Distributions.BetaA2B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
 | 
					            var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
 | 
					            var dist = new FastRng.Double.Distributions.BetaA2B5(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.BetaA5B2(rng);
 | 
					            var dist = new FastRng.Double.Distributions.BetaA5B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.BetaA5B2(rng);
 | 
					            var dist = new FastRng.Double.Distributions.BetaA5B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var value = await rng.NextNumber(dist);
 | 
					                var value = await dist.NextNumber();
 | 
				
			||||||
                fqa.CountThis(value);
 | 
					                fqa.CountThis(value);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ChiSquareK1(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var value = await rng.NextNumber(dist);
 | 
					                var value = await dist.NextNumber();
 | 
				
			||||||
                fqa.CountThis(value);
 | 
					                fqa.CountThis(value);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ChiSquareK10(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ChiSquareK10(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ChiSquareK10(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ChiSquareK10(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ChiSquareK4(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ExponentialLa10(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ExponentialLa10(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ExponentialLa10(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ExponentialLa10(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ExponentialLa5(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ExponentialLa5(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.ExponentialLa5(rng);
 | 
					            var dist = new FastRng.Double.Distributions.ExponentialLa5(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.GammaA5B15(rng);
 | 
					            var dist = new FastRng.Double.Distributions.GammaA5B15(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.GammaA5B15(rng);
 | 
					            var dist = new FastRng.Double.Distributions.GammaA5B15(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
 | 
					            var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
 | 
					            var dist = new FastRng.Double.Distributions.InverseExponentialLa10(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.InverseExponentialLa5(rng);
 | 
					            var dist = new FastRng.Double.Distributions.InverseExponentialLa5(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.InverseExponentialLa5(rng);
 | 
					            var dist = new FastRng.Double.Distributions.InverseExponentialLa5(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
 | 
					            var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
 | 
					            var dist = new FastRng.Double.Distributions.InverseGammaA3B05(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.LaplaceB01M0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
 | 
					            var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
 | 
					            var dist = new FastRng.Double.Distributions.LaplaceB01M05(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.LogNormalS1M0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.LogNormalS1M0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.LogNormalS1M0(rng);
 | 
					            var dist = new FastRng.Double.Distributions.LogNormalS1M0(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var nextNumber = await rng.NextNumber(dist);
 | 
					                var nextNumber = await dist.NextNumber();
 | 
				
			||||||
                stats.Push(nextNumber);
 | 
					                stats.Push(nextNumber);
 | 
				
			||||||
                fra.CountThis(nextNumber);
 | 
					                fra.CountThis(nextNumber);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -48,7 +48,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.NormalS02M05(rng);
 | 
					            var dist = new FastRng.Double.Distributions.NormalS02M05(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
@ -63,7 +63,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.NormalS02M05(rng);
 | 
					            var dist = new FastRng.Double.Distributions.NormalS02M05(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
 | 
					            var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
 | 
					            var dist = new FastRng.Double.Distributions.StudentTNu1(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -119,7 +119,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            using var rng = new MultiThreadedRng(); 
 | 
					            using var rng = new MultiThreadedRng(); 
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.Uniform(rng);
 | 
					            var dist = new FastRng.Double.Distributions.Uniform(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
@ -134,7 +134,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            using var rng = new MultiThreadedRng();
 | 
					            using var rng = new MultiThreadedRng();
 | 
				
			||||||
            var dist = new FastRng.Double.Distributions.Uniform(rng);
 | 
					            var dist = new FastRng.Double.Distributions.Uniform(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
@ -164,7 +164,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < distribution.Length - 1; n++)
 | 
					            for (var n = 0; n < distribution.Length - 1; n++)
 | 
				
			||||||
                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
					                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
				
			||||||
@ -180,7 +180,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0UL, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0UL, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < distribution.Length - 1; n++)
 | 
					            for (var n = 0; n < distribution.Length - 1; n++)
 | 
				
			||||||
                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
					                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
				
			||||||
@ -196,7 +196,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[(uint)Math.Floor(await rng.NextNumber(0.0, 100.0, dist))]++;
 | 
					                distribution[(uint)Math.Floor(await dist.NextNumber(0.0, 100.0))]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < distribution.Length - 1; n++)
 | 
					            for (var n = 0; n < distribution.Length - 1; n++)
 | 
				
			||||||
                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
					                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
				
			||||||
@ -211,7 +211,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -225,7 +225,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0UL, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0UL, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -239,7 +239,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[(uint)Math.Floor(await rng.NextNumber(0.0, 100.0, dist))]++;
 | 
					                distribution[(uint)Math.Floor(await dist.NextNumber(0.0, 100.0))]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -253,7 +253,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 100_000_000;
 | 
					            var runs = 100_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -267,7 +267,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 100_000_000;
 | 
					            var runs = 100_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0UL, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0UL, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -281,7 +281,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 100_000_000;
 | 
					            var runs = 100_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[(uint)Math.Floor(await rng.NextNumber(0.0, 100.0, dist))]++;
 | 
					                distribution[(uint)Math.Floor(await dist.NextNumber(0.0, 100.0))]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.WeibullK05La1(rng);
 | 
					            var dist = new FastRng.Double.Distributions.WeibullK05La1(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Double.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Double.Distributions.WeibullK05La1(rng);
 | 
					            var dist = new FastRng.Double.Distributions.WeibullK05La1(rng);
 | 
				
			||||||
            var samples = new double[1_000];
 | 
					            var samples = new double[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0, 1.0, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0, 1.0);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0), "Min is out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            for (uint n = 0; n < 1_000_000; n++)
 | 
					            for (uint n = 0; n < 1_000_000; n++)
 | 
				
			||||||
                Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
 | 
					                Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -30,7 +30,7 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            for (ulong n = 0; n < 1_000_000; n++)
 | 
					            for (ulong n = 0; n < 1_000_000; n++)
 | 
				
			||||||
                Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
 | 
					                Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -40,7 +40,7 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            for (var n = 0.0; n < 1e6; n++)
 | 
					            for (var n = 0.0; n < 1e6; n++)
 | 
				
			||||||
                Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
 | 
					                Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -49,9 +49,9 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange02Uint()
 | 
					        public async Task TestRange02Uint()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5, 5, dist), Is.EqualTo(5));
 | 
					            Assert.That(await dist.NextNumber(5, 5), Is.EqualTo(5));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0, 0, dist), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(0, 0), Is.EqualTo(0));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_000), Is.EqualTo(3_000_000_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -60,9 +60,9 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange02Ulong()
 | 
					        public async Task TestRange02Ulong()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5UL, 5, dist), Is.EqualTo(5));
 | 
					            Assert.That(await dist.NextNumber(5UL, 5), Is.EqualTo(5));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0UL, 0, dist), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(0UL, 0), Is.EqualTo(0));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_000), Is.EqualTo(3_000_000_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -71,9 +71,9 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange02Float()
 | 
					        public async Task TestRange02Float()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5f, 5f, dist), Is.EqualTo(5));
 | 
					            Assert.That(await dist.NextNumber(5f, 5f), Is.EqualTo(5));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0f, 0f, dist), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(0f, 0f), Is.EqualTo(0));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3e9, 3e9, dist), Is.EqualTo(3e9));
 | 
					            Assert.That(await dist.NextNumber(3e9, 3e9), Is.EqualTo(3e9));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -82,9 +82,9 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange03Uint()
 | 
					        public async Task TestRange03Uint()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5, 6, dist), Is.InRange(5, 6));
 | 
					            Assert.That(await dist.NextNumber(5, 6), Is.InRange(5, 6));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0, 1, dist), Is.InRange(0, 1));
 | 
					            Assert.That(await dist.NextNumber(0, 1), Is.InRange(0, 1));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -93,9 +93,9 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange03Ulong()
 | 
					        public async Task TestRange03Ulong()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5UL, 6, dist), Is.InRange(5, 6));
 | 
					            Assert.That(await dist.NextNumber(5UL, 6), Is.InRange(5, 6));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0UL, 1, dist), Is.InRange(0, 1));
 | 
					            Assert.That(await dist.NextNumber(0UL, 1), Is.InRange(0, 1));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -104,9 +104,9 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange03Float()
 | 
					        public async Task TestRange03Float()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5f, 6, dist), Is.InRange(5, 6));
 | 
					            Assert.That(await dist.NextNumber(5f, 6), Is.InRange(5, 6));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0f, 1, dist), Is.InRange(0, 1));
 | 
					            Assert.That(await dist.NextNumber(0f, 1), Is.InRange(0, 1));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3e9, 3e9+2, dist), Is.InRange(3e9, 3e9+2));
 | 
					            Assert.That(await dist.NextNumber(3e9, 3e9+2), Is.InRange(3e9, 3e9+2));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -115,8 +115,8 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange04Uint()
 | 
					        public async Task TestRange04Uint()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(10, 1, dist), Is.InRange(1, 10));
 | 
					            Assert.That(await dist.NextNumber(10, 1), Is.InRange(1, 10));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(20, 1, dist), Is.InRange(1, 20));
 | 
					            Assert.That(await dist.NextNumber(20, 1), Is.InRange(1, 20));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -125,8 +125,8 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange04Ulong()
 | 
					        public async Task TestRange04Ulong()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(10UL, 1, dist), Is.InRange(1, 10));
 | 
					            Assert.That(await dist.NextNumber(10UL, 1), Is.InRange(1, 10));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(20UL, 1, dist), Is.InRange(1, 20));
 | 
					            Assert.That(await dist.NextNumber(20UL, 1), Is.InRange(1, 20));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -135,8 +135,8 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        public async Task TestRange04Float()
 | 
					        public async Task TestRange04Float()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(10.0, 1, dist), Is.InRange(1, 10));
 | 
					            Assert.That(await dist.NextNumber(10.0, 1), Is.InRange(1, 10));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(20.0, 1, dist), Is.InRange(1, 20));
 | 
					            Assert.That(await dist.NextNumber(20.0, 1), Is.InRange(1, 20));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -144,8 +144,8 @@ namespace FastRngTests.Double
 | 
				
			|||||||
        [Category(TestCategories.NORMAL)]
 | 
					        [Category(TestCategories.NORMAL)]
 | 
				
			||||||
        public async Task TestStoppingProducers01()
 | 
					        public async Task TestStoppingProducers01()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            using var rng2 = new MultiThreadedRng();
 | 
					            var rng2 = new MultiThreadedRng();
 | 
				
			||||||
            rng2.StopProducer();
 | 
					            rng2.Dispose();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
 | 
					            var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
 | 
				
			||||||
            var wasCanceled = false;
 | 
					            var wasCanceled = false;
 | 
				
			||||||
@ -170,19 +170,19 @@ namespace FastRngTests.Double
 | 
				
			|||||||
            Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
 | 
					            Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(-1d, 1d, new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(-1d, 1d, tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(0u, 6u, new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(0u, 6u, tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(0ul, 6ul, new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -283,7 +283,7 @@ namespace FastRngTests.Double
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            using var rng2 = new MultiThreadedRng();
 | 
					            using var rng2 = new MultiThreadedRng();
 | 
				
			||||||
            var dist = new Uniform(rng2);
 | 
					            var dist = new Uniform(rng2);
 | 
				
			||||||
            Assert.That(await rng2.NextNumber(1, 100_000, dist, token), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(1, 100_000, token), Is.EqualTo(0));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
 | 
				
			|||||||
@ -46,7 +46,7 @@ namespace FastRngTests.Double
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Start();
 | 
					            stopwatch.Start();
 | 
				
			||||||
            for (uint n = 0; n < data.Length; n++)
 | 
					            for (uint n = 0; n < data.Length; n++)
 | 
				
			||||||
                data[n] = await rng.NextNumber(dist);
 | 
					                data[n] = await dist.NextNumber();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Stop();
 | 
					            stopwatch.Stop();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -65,7 +65,7 @@ namespace FastRngTests.Double
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Start();
 | 
					            stopwatch.Start();
 | 
				
			||||||
            for (uint n = 0; n < data.Length; n++)
 | 
					            for (uint n = 0; n < data.Length; n++)
 | 
				
			||||||
                data[n] = await rng.NextNumber(dist);
 | 
					                data[n] = await dist.NextNumber();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Stop();
 | 
					            stopwatch.Stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new Float.FrequencyAnalysis();
 | 
					            var fqa = new Float.FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
 | 
					            var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
 | 
					            var dist = new FastRng.Float.Distributions.BetaA2B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new Float.FrequencyAnalysis();
 | 
					            var fqa = new Float.FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
 | 
					            var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
 | 
					            var dist = new FastRng.Float.Distributions.BetaA2B5(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
 | 
					            var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
 | 
					            var dist = new FastRng.Float.Distributions.BetaA5B2(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -23,7 +23,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.CauchyLorentzX0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var value = await rng.NextNumber(dist);
 | 
					                var value = await dist.NextNumber();
 | 
				
			||||||
                fqa.CountThis(value);
 | 
					                fqa.CountThis(value);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ChiSquareK1(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -21,7 +21,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var value = await rng.NextNumber(dist);
 | 
					                var value = await dist.NextNumber();
 | 
				
			||||||
                fqa.CountThis(value);
 | 
					                fqa.CountThis(value);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@ -55,7 +55,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -70,7 +70,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ChiSquareK10(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ChiSquareK4(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ExponentialLa10(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
 | 
					            var dist = new FastRng.Float.Distributions.ExponentialLa5(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
 | 
					            var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
 | 
					            var dist = new FastRng.Float.Distributions.GammaA5B15(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
 | 
					            var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
 | 
					            var dist = new FastRng.Float.Distributions.InverseExponentialLa10(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fqa = new FrequencyAnalysis();
 | 
					            var fqa = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fqa.CountThis(await rng.NextNumber(dist));
 | 
					                fqa.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fqa.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
 | 
					            var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
 | 
					            var dist = new FastRng.Float.Distributions.InverseExponentialLa5(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
 | 
					            var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
 | 
					            var dist = new FastRng.Float.Distributions.InverseGammaA3B05(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.LaplaceB01M0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
 | 
					            var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
 | 
					            var dist = new FastRng.Float.Distributions.LaplaceB01M05(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
 | 
					            var dist = new FastRng.Float.Distributions.LogNormalS1M0(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -25,7 +25,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var nextNumber = await rng.NextNumber(dist);
 | 
					                var nextNumber = await dist.NextNumber();
 | 
				
			||||||
                stats.Push(nextNumber);
 | 
					                stats.Push(nextNumber);
 | 
				
			||||||
                fra.CountThis(nextNumber);
 | 
					                fra.CountThis(nextNumber);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -48,7 +48,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
 | 
					            var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
@ -63,7 +63,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
 | 
					            var dist = new FastRng.Float.Distributions.NormalS02M05(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
 | 
					            var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
 | 
					            var dist = new FastRng.Float.Distributions.StudentTNu1(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -119,7 +119,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.Uniform(rng);
 | 
					            var dist = new FastRng.Float.Distributions.Uniform(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
@ -134,7 +134,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            var dist = new FastRng.Float.Distributions.Uniform(rng);
 | 
					            var dist = new FastRng.Float.Distributions.Uniform(rng);
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
@ -164,7 +164,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < distribution.Length - 1; n++)
 | 
					            for (var n = 0; n < distribution.Length - 1; n++)
 | 
				
			||||||
                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
					                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
				
			||||||
@ -180,7 +180,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0UL, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0UL, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < distribution.Length - 1; n++)
 | 
					            for (var n = 0; n < distribution.Length - 1; n++)
 | 
				
			||||||
                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
					                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
				
			||||||
@ -196,7 +196,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[(uint)MathF.Floor(await rng.NextNumber(0.0f, 100.0f, dist))]++;
 | 
					                distribution[(uint)MathF.Floor(await dist.NextNumber(0.0f, 100.0f))]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < distribution.Length - 1; n++)
 | 
					            for (var n = 0; n < distribution.Length - 1; n++)
 | 
				
			||||||
                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
					                Assert.That(distribution[n], Is.GreaterThan(0));
 | 
				
			||||||
@ -211,7 +211,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -225,7 +225,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0UL, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0UL, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -239,7 +239,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 1_000_000;
 | 
					            var runs = 1_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[(uint)MathF.Floor(await rng.NextNumber(0.0f, 100.0f, dist))]++;
 | 
					                distribution[(uint)MathF.Floor(await dist.NextNumber(0.0f, 100.0f))]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 600));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -253,7 +253,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 100_000_000;
 | 
					            var runs = 100_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -267,7 +267,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 100_000_000;
 | 
					            var runs = 100_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[await rng.NextNumber(0UL, 100, dist)]++;
 | 
					                distribution[await dist.NextNumber(0UL, 100)]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -281,7 +281,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var distribution = new uint[101];
 | 
					            var distribution = new uint[101];
 | 
				
			||||||
            var runs = 100_000_000;
 | 
					            var runs = 100_000_000;
 | 
				
			||||||
            for (var n = 0; n < runs; n++)
 | 
					            for (var n = 0; n < runs; n++)
 | 
				
			||||||
                distribution[(uint)MathF.Floor(await rng.NextNumber(0.0f, 100.0f, dist))]++;
 | 
					                distribution[(uint)MathF.Floor(await dist.NextNumber(0.0f, 100.0f))]++;
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
					            Assert.That(distribution[..^1].Max() - distribution[..^1].Min(), Is.InRange(0, 6_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var fra = new FrequencyAnalysis();
 | 
					            var fra = new FrequencyAnalysis();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            for (var n = 0; n < 100_000; n++)
 | 
					            for (var n = 0; n < 100_000; n++)
 | 
				
			||||||
                fra.CountThis(await rng.NextNumber(dist));
 | 
					                fra.CountThis(await dist.NextNumber());
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
					            var result = fra.NormalizeAndPlotEvents(TestContext.WriteLine);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -52,7 +52,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
 | 
					            var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(-1.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(-1.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
					            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(-1.0f), "Min out of range");
 | 
				
			||||||
            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max out of range");
 | 
				
			||||||
@ -67,7 +67,7 @@ namespace FastRngTests.Float.Distributions
 | 
				
			|||||||
            var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
 | 
					            var dist = new FastRng.Float.Distributions.WeibullK05La1(rng);
 | 
				
			||||||
            var samples = new float[1_000];
 | 
					            var samples = new float[1_000];
 | 
				
			||||||
            for (var n = 0; n < samples.Length; n++)
 | 
					            for (var n = 0; n < samples.Length; n++)
 | 
				
			||||||
                samples[n] = await rng.NextNumber(0.0f, 1.0f, dist);
 | 
					                samples[n] = await dist.NextNumber(0.0f, 1.0f);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            Assert.That(samples.Min(), Is.GreaterThanOrEqualTo(0.0f), "Min is out of range");
 | 
					            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");
 | 
					            Assert.That(samples.Max(), Is.LessThanOrEqualTo(1.0f), "Max is out of range");
 | 
				
			||||||
 | 
				
			|||||||
@ -20,7 +20,7 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            for (uint n = 0; n < 1_000_000; n++)
 | 
					            for (uint n = 0; n < 1_000_000; n++)
 | 
				
			||||||
                Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
 | 
					                Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -30,7 +30,7 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            for (ulong n = 0; n < 1_000_000; n++)
 | 
					            for (ulong n = 0; n < 1_000_000; n++)
 | 
				
			||||||
                Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
 | 
					                Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -40,7 +40,7 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            for (var n = 0.0f; n < 1e6f; n++)
 | 
					            for (var n = 0.0f; n < 1e6f; n++)
 | 
				
			||||||
                Assert.That(await rng.NextNumber(n, 100_000 + n, dist), Is.InRange(n, 100_000 + n));
 | 
					                Assert.That(await dist.NextNumber(n, 100_000 + n), Is.InRange(n, 100_000 + n));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -49,9 +49,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange02Uint()
 | 
					        public async Task TestRange02Uint()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5, 5, dist), Is.EqualTo(5));
 | 
					            Assert.That(await dist.NextNumber(5, 5), Is.EqualTo(5));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0, 0, dist), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(0, 0), Is.EqualTo(0));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_000), Is.EqualTo(3_000_000_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -60,9 +60,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange02Ulong()
 | 
					        public async Task TestRange02Ulong()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5UL, 5, dist), Is.EqualTo(5));
 | 
					            Assert.That(await dist.NextNumber(5UL, 5), Is.EqualTo(5));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0UL, 0, dist), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(0UL, 0), Is.EqualTo(0));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_000, dist), Is.EqualTo(3_000_000_000));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_000), Is.EqualTo(3_000_000_000));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -71,9 +71,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange02Float()
 | 
					        public async Task TestRange02Float()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5f, 5f, dist), Is.EqualTo(5));
 | 
					            Assert.That(await dist.NextNumber(5f, 5f), Is.EqualTo(5));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0f, 0f, dist), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(0f, 0f), Is.EqualTo(0));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3e9f, 3e9f, dist), Is.EqualTo(3e9f));
 | 
					            Assert.That(await dist.NextNumber(3e9f, 3e9f), Is.EqualTo(3e9f));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -82,9 +82,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange03Uint()
 | 
					        public async Task TestRange03Uint()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5, 6, dist), Is.InRange(5, 6));
 | 
					            Assert.That(await dist.NextNumber(5, 6), Is.InRange(5, 6));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0, 1, dist), Is.InRange(0, 1));
 | 
					            Assert.That(await dist.NextNumber(0, 1), Is.InRange(0, 1));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -93,9 +93,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange03Ulong()
 | 
					        public async Task TestRange03Ulong()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5UL, 6, dist), Is.InRange(5, 6));
 | 
					            Assert.That(await dist.NextNumber(5UL, 6), Is.InRange(5, 6));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0UL, 1, dist), Is.InRange(0, 1));
 | 
					            Assert.That(await dist.NextNumber(0UL, 1), Is.InRange(0, 1));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3_000_000_000UL, 3_000_000_002, dist), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
					            Assert.That(await dist.NextNumber(3_000_000_000UL, 3_000_000_002), Is.InRange(3_000_000_000, 3_000_000_002));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -104,9 +104,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange03Float()
 | 
					        public async Task TestRange03Float()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(5f, 6f, dist), Is.InRange(5f, 6f));
 | 
					            Assert.That(await dist.NextNumber(5f, 6f), Is.InRange(5f, 6f));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(0f, 1f, dist), Is.InRange(0f, 1f));
 | 
					            Assert.That(await dist.NextNumber(0f, 1f), Is.InRange(0f, 1f));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(3e9f, 3e9f+2f, dist), Is.InRange(3e9f, 3e9f+2f));
 | 
					            Assert.That(await dist.NextNumber(3e9f, 3e9f+2f), Is.InRange(3e9f, 3e9f+2f));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -115,8 +115,8 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange04Uint()
 | 
					        public async Task TestRange04Uint()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(10, 1, dist), Is.InRange(1, 10));
 | 
					            Assert.That(await dist.NextNumber(10, 1), Is.InRange(1, 10));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(20, 1, dist), Is.InRange(1, 20));
 | 
					            Assert.That(await dist.NextNumber(20, 1), Is.InRange(1, 20));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -125,8 +125,8 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange04Ulong()
 | 
					        public async Task TestRange04Ulong()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(10UL, 1, dist), Is.InRange(1, 10));
 | 
					            Assert.That(await dist.NextNumber(10UL, 1), Is.InRange(1, 10));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(20UL, 1, dist), Is.InRange(1, 20));
 | 
					            Assert.That(await dist.NextNumber(20UL, 1), Is.InRange(1, 20));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -135,8 +135,8 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        public async Task TestRange04Float()
 | 
					        public async Task TestRange04Float()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng.NextNumber(10.0f, 1f, dist), Is.InRange(1f, 10f));
 | 
					            Assert.That(await dist.NextNumber(10.0f, 1f), Is.InRange(1f, 10f));
 | 
				
			||||||
            Assert.That(await rng.NextNumber(20.0f, 1f, dist), Is.InRange(1f, 20f));
 | 
					            Assert.That(await dist.NextNumber(20.0f, 1f), Is.InRange(1f, 20f));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
@ -144,8 +144,8 @@ namespace FastRngTests.Float
 | 
				
			|||||||
        [Category(TestCategories.NORMAL)]
 | 
					        [Category(TestCategories.NORMAL)]
 | 
				
			||||||
        public async Task TestStoppingProducers01()
 | 
					        public async Task TestStoppingProducers01()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            using var rng2 = new MultiThreadedRng();
 | 
					            var rng2 = new MultiThreadedRng();
 | 
				
			||||||
            rng2.StopProducer();
 | 
					            rng2.Dispose();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
 | 
					            var masterToken = new CancellationTokenSource(TimeSpan.FromSeconds(16)).Token;
 | 
				
			||||||
            var wasCanceled = false;
 | 
					            var wasCanceled = false;
 | 
				
			||||||
@ -170,19 +170,19 @@ namespace FastRngTests.Float
 | 
				
			|||||||
            Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
 | 
					            Assert.That(wasCanceled, Is.True, "The consumer was not canceled");
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            var tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(-1f, 1f, new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(-1f, 1f, tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(0u, 6u, new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(0u, 6u, tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
					            tokenSource2 = new CancellationTokenSource(TimeSpan.FromSeconds(3));
 | 
				
			||||||
            await rng2.NextNumber(0ul, 6ul, new NormalS02M05(rng2), tokenSource2.Token);
 | 
					            await new NormalS02M05(rng2).NextNumber(0ul, 6ul, tokenSource2.Token);
 | 
				
			||||||
            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
					            Assert.That(tokenSource2.IsCancellationRequested, Is.True);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -283,7 +283,7 @@ namespace FastRngTests.Float
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            using var rng2 = new MultiThreadedRng();
 | 
					            using var rng2 = new MultiThreadedRng();
 | 
				
			||||||
            var dist = new Uniform(this.rng);
 | 
					            var dist = new Uniform(this.rng);
 | 
				
			||||||
            Assert.That(await rng2.NextNumber(1, 100_000, dist, token), Is.EqualTo(0));
 | 
					            Assert.That(await dist.NextNumber(1, 100_000, token), Is.EqualTo(0));
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        [Test]
 | 
					        [Test]
 | 
				
			||||||
 | 
				
			|||||||
@ -46,10 +46,9 @@ namespace FastRngTests.Float
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Start();
 | 
					            stopwatch.Start();
 | 
				
			||||||
            for (uint n = 0; n < data.Length; n++)
 | 
					            for (uint n = 0; n < data.Length; n++)
 | 
				
			||||||
                data[n] = await rng.NextNumber(dist);
 | 
					                data[n] = await dist.NextNumber();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Stop();
 | 
					            stopwatch.Stop();
 | 
				
			||||||
            rng.StopProducer();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
            TestContext.WriteLine($"Generated 1M normal distributed random numbers in {stopwatch.Elapsed.Minutes} minute(s), {stopwatch.Elapsed.Seconds} second(s), and {stopwatch.Elapsed.Milliseconds} milliseconds.");
 | 
					            TestContext.WriteLine($"Generated 1M normal distributed random numbers in {stopwatch.Elapsed.Minutes} minute(s), {stopwatch.Elapsed.Seconds} second(s), and {stopwatch.Elapsed.Milliseconds} milliseconds.");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -66,7 +65,7 @@ namespace FastRngTests.Float
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Start();
 | 
					            stopwatch.Start();
 | 
				
			||||||
            for (uint n = 0; n < data.Length; n++)
 | 
					            for (uint n = 0; n < data.Length; n++)
 | 
				
			||||||
                data[n] = await rng.NextNumber(dist);
 | 
					                data[n] = await dist.NextNumber();
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            stopwatch.Stop();
 | 
					            stopwatch.Stop();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user