Ejemplo n.º 1
0
        public static void Print([NotNull] this ITestOutputHelper output, [NotNull] string title, [NotNull] Histogram histogram)
        {
            var    values          = histogram.GetAllValues().CopyToArray();
            double mValue          = MValueCalculator.Calculate(values);
            var    cultureInfo     = TestCultureInfo.Instance;
            var    binSizeInterval = TimeInterval.FromNanoseconds(histogram.BinSize);

            output.WriteLine($"=== {title}:Short (BinSize={binSizeInterval.ToString(cultureInfo)}, mValue={mValue.ToString("0.##", cultureInfo)}) ===");
            output.WriteLine(histogram.ToString(histogram.CreateNanosecondFormatter(cultureInfo, "0.0000")));
            output.WriteLine($"=== {title}:Full (BinSize={binSizeInterval.ToString(cultureInfo)}, mValue={mValue.ToString("0.##", cultureInfo)}) ===");
            output.WriteLine(histogram.ToString(histogram.CreateNanosecondFormatter(cultureInfo, "0.0000"), full: true));
        }
Ejemplo n.º 2
0
        public void Run()
        {
            var random = new Random(42);
            var data   = new List <double>();

            data.AddRange(new NormalDistribution(mean: 20, stdDev: 1).Random(random).Next(200));
            data.AddRange(new NormalDistribution(mean: 22, stdDev: 1).Random(random).Next(200));
            List <double>
            unimodal     = new List <double>(),
                bimodal  = new List <double>(),
                trimodal = new List <double>();

            unimodal.AddRange(new NormalDistribution(mean: 20, stdDev: 1).Random(random).Next(200));
            bimodal.AddRange(new NormalDistribution(mean: 20, stdDev: 1).Random(random).Next(200));
            bimodal.AddRange(new NormalDistribution(mean: 30, stdDev: 1).Random(random).Next(200));
            trimodal.AddRange(new NormalDistribution(mean: 20, stdDev: 1).Random(random).Next(200));
            trimodal.AddRange(new NormalDistribution(mean: 30, stdDev: 1).Random(random).Next(200));
            trimodal.AddRange(new NormalDistribution(mean: 40, stdDev: 1).Random(random).Next(200));
            Console.WriteLine("Unimodal : " + MValueCalculator.Calculate(unimodal));
            Console.WriteLine("Bimodal  : " + MValueCalculator.Calculate(bimodal));
            Console.WriteLine("Trimodal : " + MValueCalculator.Calculate(trimodal));
        }
Ejemplo n.º 3
0
        public void Run()
        {
            var random = new RandomDistribution(42);
            var data   = new List <double>();

            data.AddRange(random.Gaussian(200, mean: 20));
            data.AddRange(random.Gaussian(200, mean: 22));
            List <double>
            unimodal     = new List <double>(),
                bimodal  = new List <double>(),
                trimodal = new List <double>();

            unimodal.AddRange(random.Gaussian(200, mean: 20));
            bimodal.AddRange(random.Gaussian(200, mean: 20));
            bimodal.AddRange(random.Gaussian(200, mean: 30));
            trimodal.AddRange(random.Gaussian(200, mean: 20));
            trimodal.AddRange(random.Gaussian(200, mean: 30));
            trimodal.AddRange(random.Gaussian(200, mean: 40));
            Console.WriteLine("Unimodal : " + MValueCalculator.Calculate(unimodal));
            Console.WriteLine("Bimodal  : " + MValueCalculator.Calculate(bimodal));
            Console.WriteLine("Trimodal : " + MValueCalculator.Calculate(trimodal));
        }
Ejemplo n.º 4
0
        // code and magic values taken from BenchmarkDotNet.Analysers.MultimodalDistributionAnalyzer
        // See http://www.brendangregg.com/FrequencyTrails/modes.html
        internal static string GetModalInfo(Benchmark benchmark)
        {
            if (benchmark.Statistics.N < 12) // not enough data to tell
            {
                return(null);
            }

            double mValue = MValueCalculator.Calculate(benchmark.Statistics.OriginalValues);

            if (mValue > 4.2)
            {
                return("multimodal");
            }
            else if (mValue > 3.2)
            {
                return("bimodal");
            }
            else if (mValue > 2.8)
            {
                return("several?");
            }

            return(null);
        }
Ejemplo n.º 5
0
        protected override IEnumerable <Conclusion> AnalyseReport(BenchmarkReport report, Summary summary)
        {
            var statistics = report.ResultStatistics;

            if (statistics == null || statistics.N < EngineResolver.DefaultMinWorkloadIterationCount)
            {
                yield break;
            }

            double mValue = MValueCalculator.Calculate(statistics.OriginalValues);

            if (mValue > 4.2)
            {
                yield return(Create("is multimodal", mValue, report, summary.Style.CultureInfo));
            }
            else if (mValue > 3.2)
            {
                yield return(Create("is bimodal", mValue, report, summary.Style.CultureInfo));
            }
            else if (mValue > 2.8)
            {
                yield return(Create("can have several modes", mValue, report, summary.Style.CultureInfo));
            }
        }
Ejemplo n.º 6
0
        // code and magic values taken from BenchmarkDotNet.Analysers.MultimodalDistributionAnalyzer
        // See http://www.brendangregg.com/FrequencyTrails/modes.html
        private static Modality GetModalInfo(Benchmark benchmark)
        {
            if (benchmark.Statistics.N < 12) // not enough data to tell
            {
                return(Modality.Single);
            }

            double mValue = MValueCalculator.Calculate(benchmark.GetOriginalValues());

            if (mValue > 4.2)
            {
                return(Modality.Multimodal);
            }
            else if (mValue > 3.2)
            {
                return(Modality.Bimodal);
            }
            else if (mValue > 2.8)
            {
                return(Modality.Several);
            }

            return(Modality.Single);
        }
        public static void Run(MValueCalculatorOptions options)
        {
            var data = options.GetSourceArray();

            Console.WriteLine(MValueCalculator.Calculate(data));
        }
        public static string ToString(this Statistics s, CultureInfo cultureInfo, Func <double, string> formatter, bool calcHistogram = false)
        {
            if (s == null)
            {
                return(NullSummaryMessage);
            }

            string listSeparator = cultureInfo.GetActualListSeparator();

            var    builder         = new StringBuilder();
            string errorPercent    = (s.StandardError / s.Mean * 100).ToString("0.00", cultureInfo);
            var    ci              = s.ConfidenceInterval;
            string ciMarginPercent = (ci.Margin / s.Mean * 100).ToString("0.00", cultureInfo);
            double mValue          = MValueCalculator.Calculate(s.OriginalValues);

            builder.Append("Mean = ");
            builder.Append(formatter(s.Mean));
            builder.Append(listSeparator);
            builder.Append(" StdErr = ");
            builder.Append(formatter(s.StandardError));
            builder.Append(" (");
            builder.Append(errorPercent);
            builder.Append("%)");
            builder.Append(listSeparator);
            builder.Append(" N = ");
            builder.Append(s.N.ToString(cultureInfo));
            builder.Append(listSeparator);
            builder.Append(" StdDev = ");
            builder.Append(formatter(s.StandardDeviation));
            builder.AppendLine();

            builder.Append("Min = ");
            builder.Append(formatter(s.Min));
            builder.Append(listSeparator);
            builder.Append(" Q1 = ");
            builder.Append(formatter(s.Q1));
            builder.Append(listSeparator);
            builder.Append(" Median = ");
            builder.Append(formatter(s.Median));
            builder.Append(listSeparator);
            builder.Append(" Q3 = ");
            builder.Append(formatter(s.Q3));
            builder.Append(listSeparator);
            builder.Append(" Max = ");
            builder.Append(formatter(s.Max));
            builder.AppendLine();

            builder.Append("IQR = ");
            builder.Append(formatter(s.InterquartileRange));
            builder.Append(listSeparator);
            builder.Append(" LowerFence = ");
            builder.Append(formatter(s.LowerFence));
            builder.Append(listSeparator);
            builder.Append(" UpperFence = ");
            builder.Append(formatter(s.UpperFence));
            builder.AppendLine();

            builder.Append("ConfidenceInterval = ");
            builder.Append(s.ConfidenceInterval.ToString(formatter));
            builder.Append(listSeparator);
            builder.Append(" Margin = ");
            builder.Append(formatter(ci.Margin));
            builder.Append(" (");
            builder.Append(ciMarginPercent);
            builder.Append("% of Mean)");
            builder.AppendLine();

            builder.Append("Skewness = ");
            builder.Append(s.Skewness.ToString("0.##", cultureInfo));
            builder.Append(listSeparator);
            builder.Append(" Kurtosis = ");
            builder.Append(s.Kurtosis.ToString("0.##", cultureInfo));
            builder.Append(listSeparator);
            builder.Append(" MValue = ");
            builder.Append(mValue.ToString("0.##", cultureInfo));
            builder.AppendLine();

            if (calcHistogram)
            {
                var histogram = HistogramBuilder.Adaptive.Build(s.OriginalValues);
                builder.AppendLine("-------------------- Histogram --------------------");
                builder.AppendLine(histogram.ToString(formatter));
                builder.AppendLine("---------------------------------------------------");
            }
            return(builder.ToString().Trim());
        }