Skip to content

Commit

Permalink
Minor fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreyAkinshin committed Jan 17, 2016
1 parent 145b78f commit b0e1082
Show file tree
Hide file tree
Showing 7 changed files with 51 additions and 29 deletions.
1 change: 1 addition & 0 deletions BenchmarkDotNet/BenchmarkDotNet.csproj
Expand Up @@ -54,6 +54,7 @@
<Compile Include="BenchmarkState.cs" />
<Compile Include="BenchmarkRunnerExtensions.cs" />
<Compile Include="EnvironmentInfo.cs" />
<Compile Include="Extensions\StatSummaryExtensions.cs" />
<Compile Include="Helpers\ResourceHelper.cs" />
<Compile Include="Extensions\StringExtensions.cs" />
<Compile Include="Plugins\Exporters\BenchmarkCsvRunsExporter.cs" />
Expand Down
8 changes: 7 additions & 1 deletion BenchmarkDotNet/Extensions/ReportExtensions.cs
Expand Up @@ -26,6 +26,12 @@ public static IList<BenchmarkRunReport> GetRunsFor<T>(this IEnumerable<Benchmark
return reports.GetReportFor<T>(actionExp).GetTargetRuns().ToList();
}

public static StatSummary GetStats(this IEnumerable<BenchmarkRunReport> runReports) => new StatSummary(runReports.Select(r => r.GetAverageNanoseconds()));
public static StatSummary GetStats(this IList<BenchmarkRunReport> runs) =>
runs.Any()
? new StatSummary(runs.Select(r => r.GetAverageNanoseconds()))
: null;

public static StatSummary GetStats(this IEnumerable<BenchmarkRunReport> runs) =>
GetStats(runs.ToList());
}
}
37 changes: 37 additions & 0 deletions BenchmarkDotNet/Extensions/StatSummaryExtensions.cs
@@ -0,0 +1,37 @@
using System.Text;
using BenchmarkDotNet.Common;
using BenchmarkDotNet.Statistic;

namespace BenchmarkDotNet.Extensions
{
public static class StatSummaryExtensions
{
private static string NullSummaryMessage = "<Empty statistic (N=0)>";

public static string ToStr(this StatSummary s)
{
if (s == null)
return NullSummaryMessage;
var builder = new StringBuilder();
builder.AppendLine($"Mean = {s.Mean.ToStr()}, StdError = {s.StandardError.ToStr()} (N = {s.N}, StdDev = {s.StandardDeviation.ToStr()})");
builder.AppendLine($"Min = {s.Min.ToStr()}, Q1 = {s.Q1.ToStr()}, Median = {s.Median.ToStr()}, Q3 = {s.Q3.ToStr()}, Max = {s.Max.ToStr()}");
builder.AppendLine($"IQR = {s.InterquartileRange.ToStr()}, LowerFence = {s.LowerFence.ToStr()}, UpperFence = {s.UpperFence.ToStr()}");
builder.AppendLine($"ConfidenceInterval = {s.ConfidenceInterval.ToStr()}");
return builder.ToString();
}

public static string ToTimeStr(this StatSummary s, TimeUnit unit = null)
{
if (s == null)
return NullSummaryMessage;
if (unit == null)
unit = TimeUnit.GetBestTimeUnit(s.Mean);
var builder = new StringBuilder();
builder.AppendLine($"Mean = {s.Mean.ToTimeStr(unit)}, StdError = {s.StandardError.ToTimeStr(unit)} (N = {s.N}, StdDev = {s.StandardDeviation.ToTimeStr(unit)})");
builder.AppendLine($"Min = {s.Min.ToTimeStr(unit)}, Q1 = {s.Q1.ToTimeStr(unit)}, Median = {s.Median.ToTimeStr(unit)}, Q3 = {s.Q3.ToTimeStr(unit)}, Max = {s.Max.ToTimeStr(unit)}");
builder.AppendLine($"IQR = {s.InterquartileRange.ToTimeStr(unit)}, LowerFence = {s.LowerFence.ToTimeStr(unit)}, UpperFence = {s.UpperFence.ToTimeStr(unit)}");
builder.AppendLine($"ConfidenceInterval = {s.ConfidenceInterval.ToTimeStr(unit)}");
return builder.ToString();
}
}
}
4 changes: 2 additions & 2 deletions BenchmarkDotNet/Plugins/Exporters/BenchmarkExporterHelper.cs
Expand Up @@ -92,8 +92,8 @@ public static class BenchmarkExporterHelper

if (showParams)
row.Add(item.Report.Parameters.IntParam.ToString());
row.Add(item.Stat.Mean.ToTimeStr(timeUnit));
row.Add(item.Stat.StandardError.ToTimeStr(timeUnit));
row.Add(pretty ? item.Stat.Mean.ToTimeStr(timeUnit) : item.Stat.Mean.ToStr());
row.Add(pretty ? item.Stat.StandardError.ToTimeStr(timeUnit) : item.Stat.StandardError.ToStr());

if (extraColumns != null)
{
Expand Down
Expand Up @@ -73,7 +73,7 @@ private BenchmarkExecResult ExecuteImpl(Process process, IBenchmarkDiagnoser dia
lines.Add(line);

// Wait until we know "Warmup" is happening, and then dissassemble the process
if (codeAlreadyExtracted == false && line.StartsWith("// Warmup") && !line.StartsWith("// Warmup (idle)"))
if (codeAlreadyExtracted == false && line.StartsWith("Warmup ") && !line.StartsWith("WarmupIdle "))
{
try
{
Expand Down
4 changes: 2 additions & 2 deletions BenchmarkDotNet/Reports/BenchmarkReport.cs
Expand Up @@ -27,7 +27,7 @@ public BenchmarkReport(Benchmark benchmark, IList<BenchmarkRunReport> runs, Envi

public static class BenchmarkReportExtensions
{
public static IEnumerable<BenchmarkRunReport> GetTargetRuns(this BenchmarkReport report) =>
report.Runs.Where(r => r.IterationMode == BenchmarkIterationMode.Target);
public static IList<BenchmarkRunReport> GetTargetRuns(this BenchmarkReport report) =>
report.Runs.Where(r => r.IterationMode == BenchmarkIterationMode.Target).ToList();
}
}
24 changes: 1 addition & 23 deletions BenchmarkDotNet/Statistic/StatSummary.cs
Expand Up @@ -24,7 +24,7 @@ public StatSummary(IEnumerable<double> values)
var list = values.ToList();
N = list.Count;
if (N == 0)
throw new InvalidOperationException("Sequence contains no elements");
throw new InvalidOperationException("StatSummary: Sequence contains no elements");
list.Sort();

if (N == 1)
Expand Down Expand Up @@ -68,27 +68,5 @@ public StatSummary(IEnumerable<double> values)
public double StandardError { get; }
public double StandardDeviation { get; }
public ConfidenceInterval ConfidenceInterval { get; }

public string ToStr()
{
var builder = new StringBuilder();
builder.AppendLine($"Mean = {Mean.ToStr()}, StdError = {StandardError.ToStr()} (N = {N}, StdDev = {StandardDeviation.ToStr()})");
builder.AppendLine($"Min = {Min.ToStr()}, Q1 = {Q1.ToStr()}, Median = {Median.ToStr()}, Q3 = {Q3.ToStr()}, Max = {Max.ToStr()}");
builder.AppendLine($"IQR = {InterquartileRange.ToStr()}, LowerFence = {LowerFence.ToStr()}, UpperFence = {UpperFence.ToStr()}");
builder.AppendLine($"ConfidenceInterval = {ConfidenceInterval.ToStr()}");
return builder.ToString();
}

public string ToTimeStr(TimeUnit unit = null)
{
if (unit == null)
unit = TimeUnit.GetBestTimeUnit(Mean);
var builder = new StringBuilder();
builder.AppendLine($"Mean = {Mean.ToTimeStr(unit)}, StdError = {StandardError.ToTimeStr(unit)} (N = {N}, StdDev = {StandardDeviation.ToTimeStr(unit)})");
builder.AppendLine($"Min = {Min.ToTimeStr(unit)}, Q1 = {Q1.ToTimeStr(unit)}, Median = {Median.ToTimeStr(unit)}, Q3 = {Q3.ToTimeStr(unit)}, Max = {Max.ToTimeStr(unit)}");
builder.AppendLine($"IQR = {InterquartileRange.ToTimeStr(unit)}, LowerFence = {LowerFence.ToTimeStr(unit)}, UpperFence = {UpperFence.ToTimeStr(unit)}");
builder.AppendLine($"ConfidenceInterval = {ConfidenceInterval.ToTimeStr(unit)}");
return builder.ToString();
}
}
}

0 comments on commit b0e1082

Please sign in to comment.