コード例 #1
0
        public string GetValue(Summary summary, BenchmarkCase benchmarkCase)
        {
            string logicalGroupKey = summary.GetLogicalGroupKey(benchmarkCase);
            var    baseline        = summary.BenchmarksCases
                                     .Where(b => summary.GetLogicalGroupKey(b) == logicalGroupKey)
                                     .FirstOrDefault(b => b.IsBaseline());
            bool invalidResults = baseline == null ||
                                  summary[baseline] == null ||
                                  summary[baseline].ResultStatistics == null ||
                                  !summary[baseline].ResultStatistics.CanBeInverted() ||
                                  summary[benchmarkCase] == null ||
                                  summary[benchmarkCase].ResultStatistics == null;

            if (invalidResults)
            {
                return("?");
            }

            var baselineStat = summary[baseline].ResultStatistics;
            var targetStat   = summary[benchmarkCase].ResultStatistics;

            double mean   = benchmarkCase.IsBaseline() ? 1 : Statistics.DivMean(targetStat, baselineStat);
            double stdDev = benchmarkCase.IsBaseline() ? 0 : Math.Sqrt(Statistics.DivVariance(targetStat, baselineStat));

            switch (Kind)
            {
            case DiffKind.Mean:
                return(IsNonBaselinesPrecise(summary, baselineStat, benchmarkCase) ? mean.ToStr("N3") : mean.ToStr("N2"));

            case DiffKind.StdDev:
                return(stdDev.ToStr("N2"));

            case DiffKind.WelchTTestPValue:
            {
                if (baselineStat.N < 2 || targetStat.N < 2)
                {
                    return("NA");
                }
                double pvalue = WelchTTest.Calc(baselineStat, targetStat).PValue;
                return(pvalue > 0.0001 || pvalue < 1e-9 ? pvalue.ToStr("N4") : pvalue.ToStr("e2"));
            }

            default:
                throw new NotSupportedException();
            }
        }
コード例 #2
0
 public string GetValue(Summary summary, BenchmarkCase benchmarkCase) => benchmarkCase.IsBaseline() ? "Yes" : "No";