using BenchmarkDotNet.Attributes; using HeuristicLab.Core; using HeuristicLab.Random; namespace HeuristicLab.Benchmarks { [CoreJob, ClrJob, MonoJob] [MinColumn, MaxColumn, MeanColumn, MedianColumn] public class RandomPerformance { private readonly IRandom mersenneTwister = new MersenneTwister(1234); private readonly IRandom fastRandom = new FastRandom(1234); [Params(1_000_000)] public int N { get; set; } [Benchmark] public double FastRandomInt() => IntPerformance(fastRandom); [Benchmark] public double MersenneTwisterInt() => IntPerformance(mersenneTwister); [Benchmark] public double FastRandomDouble() => DoublePerformance(fastRandom); [Benchmark] public double MersenneTwisterDouble() => DoublePerformance(mersenneTwister); #region helper methods private double IntPerformance(IRandom random) { double avg = 0; for (int i = 0; i < N; ++i) { avg += random.Next(); } return avg; } private double DoublePerformance(IRandom random) { double avg = 0; for (int i = 0; i < N; ++i) { avg += random.NextDouble(); } return avg; } #endregion } }