diff --git a/src/BenchmarkDotNet.Diagnostics.Windows/Tracing/NativeMemoryLogParser.cs b/src/BenchmarkDotNet.Diagnostics.Windows/Tracing/NativeMemoryLogParser.cs index 3935cd4cd4..7510a4eb8c 100644 --- a/src/BenchmarkDotNet.Diagnostics.Windows/Tracing/NativeMemoryLogParser.cs +++ b/src/BenchmarkDotNet.Diagnostics.Windows/Tracing/NativeMemoryLogParser.cs @@ -1,6 +1,7 @@ using BenchmarkDotNet.Diagnosers; using BenchmarkDotNet.Engines; using BenchmarkDotNet.Extensions; +using BenchmarkDotNet.Helpers; using BenchmarkDotNet.Loggers; using BenchmarkDotNet.Reports; using BenchmarkDotNet.Running; @@ -245,7 +246,7 @@ bool IsCallStackIn(StackSourceCallStackIndex index) logger.WriteLine( $"Native memory allocated per single operation: " + - $"{PerfolizerMeasurementFormatter.Instance.Format( + $"{UnitHelper.Format( SizeValue.FromBytes(memoryAllocatedPerOperation).ToMeasurement(SizeUnit.B), formatProvider: benchmarkCase.Config.CultureInfo)}"); logger.WriteLine($"Count of allocated object: {countOfAllocatedObject / totalOperation}"); @@ -254,7 +255,7 @@ bool IsCallStackIn(StackSourceCallStackIndex index) { logger.WriteLine( $"Native memory leak per single operation: " + - $"{PerfolizerMeasurementFormatter.Instance.Format( + $"{UnitHelper.Format( SizeValue.FromBytes(memoryLeakPerOperation).ToMeasurement(SizeUnit.B), formatProvider: benchmarkCase.Config.CultureInfo)}"); } diff --git a/src/BenchmarkDotNet/Analysers/ZeroMeasurementHelper.cs b/src/BenchmarkDotNet/Analysers/ZeroMeasurementHelper.cs index 2b8938bcfc..60891d1c6e 100644 --- a/src/BenchmarkDotNet/Analysers/ZeroMeasurementHelper.cs +++ b/src/BenchmarkDotNet/Analysers/ZeroMeasurementHelper.cs @@ -6,6 +6,7 @@ using Perfolizer.Metrology; using Pragmastat; using Pragmastat.Estimators; +using Threshold = Perfolizer.Metrology.Threshold; namespace BenchmarkDotNet.Analysers { @@ -24,7 +25,15 @@ public static bool AreIndistinguishable(double[] workload, double[] overhead, Th public static bool AreIndistinguishable(Sample workload, Sample overhead, Threshold? threshold = null) { threshold ??= MathHelper.DefaultThreshold; + // Perfolizer deprecated its significance testing API in favor of Pragmastat.Toolkit.Compare2. + // Compare2 reports per-metric verdicts against typed thresholds instead of a single + // equivalence result, so adopting it would change every verdict this codebase produces: + // zero-measurement detection, ranks, and the statistical test column. Staying on the + // deprecated path keeps the current statistics intact; the switch needs its own change, + // with its own validation against real runs. +#pragma warning disable CS0618 // Type or member is obsolete var tost = new SimpleEquivalenceTest(MannWhitneyTest.Instance); +#pragma warning restore CS0618 if (workload.Size == 1 || overhead.Size == 1) return false; return tost.Perform(workload, overhead, threshold, SignificanceLevel.P1E5) == ComparisonResult.Indistinguishable; diff --git a/src/BenchmarkDotNet/BenchmarkDotNet.csproj b/src/BenchmarkDotNet/BenchmarkDotNet.csproj index 3eea2ce96b..751b75a5da 100644 --- a/src/BenchmarkDotNet/BenchmarkDotNet.csproj +++ b/src/BenchmarkDotNet/BenchmarkDotNet.csproj @@ -28,7 +28,7 @@ - + diff --git a/src/BenchmarkDotNet/Columns/MetricColumn.cs b/src/BenchmarkDotNet/Columns/MetricColumn.cs index 8ca2ded7b1..320085e34a 100644 --- a/src/BenchmarkDotNet/Columns/MetricColumn.cs +++ b/src/BenchmarkDotNet/Columns/MetricColumn.cs @@ -1,4 +1,5 @@ using BenchmarkDotNet.Extensions; +using BenchmarkDotNet.Helpers; using BenchmarkDotNet.Reports; using BenchmarkDotNet.Running; using Perfolizer.Horology; @@ -44,25 +45,24 @@ public string GetValue(Summary summary, BenchmarkCase benchmarkCase, SummaryStyl var cultureInfo = summary.GetCultureInfo(); bool printUnits = style.PrintUnitsInContent || style.PrintUnitsInHeader; - var unitPresentation = new UnitPresentation(style.PrintUnitsInContent, minUnitWidth: 0, gap: true); string numberFormat = descriptor.NumberFormat; if (printUnits && descriptor.UnitType == UnitType.CodeSize) { var measurement = SizeValue.FromBytes((long)metric.Value).ToMeasurement(style.CodeSizeUnit); - return PerfolizerMeasurementFormatter.Instance.Format(measurement, numberFormat, cultureInfo, unitPresentation); + return UnitHelper.Format(measurement, numberFormat, cultureInfo, style.PrintUnitsInContent); } if (printUnits && descriptor.UnitType == UnitType.Size) { var measurement = SizeValue.FromBytes((long)metric.Value).ToMeasurement(style.SizeUnit); - return PerfolizerMeasurementFormatter.Instance.Format(measurement, numberFormat, cultureInfo, unitPresentation); + return UnitHelper.Format(measurement, numberFormat, cultureInfo, style.PrintUnitsInContent); } if (printUnits && descriptor.UnitType == UnitType.Time) { if (numberFormat.IsBlank()) numberFormat = "N4"; var measurement = TimeInterval.FromNanoseconds(metric.Value).ToMeasurement(style.TimeUnit); - return PerfolizerMeasurementFormatter.Instance.Format(measurement, numberFormat, cultureInfo, unitPresentation); + return UnitHelper.Format(measurement, numberFormat, cultureInfo, style.PrintUnitsInContent); } return metric.Value.ToString(numberFormat, cultureInfo); diff --git a/src/BenchmarkDotNet/Columns/StatisticColumn.cs b/src/BenchmarkDotNet/Columns/StatisticColumn.cs index 79df132915..d12b844b2c 100644 --- a/src/BenchmarkDotNet/Columns/StatisticColumn.cs +++ b/src/BenchmarkDotNet/Columns/StatisticColumn.cs @@ -1,4 +1,5 @@ using BenchmarkDotNet.Configs; +using BenchmarkDotNet.Helpers; using BenchmarkDotNet.Mathematics; using BenchmarkDotNet.Reports; using BenchmarkDotNet.Running; @@ -151,11 +152,11 @@ private string Format(Summary summary, ImmutableConfig config, Statistics? stati if (double.IsNaN(value)) return "NA"; return UnitType == UnitType.Time - ? PerfolizerMeasurementFormatter.Instance.Format( + ? UnitHelper.Format( TimeInterval.FromNanoseconds(value).ToMeasurement(style.TimeUnit), format, style.CultureInfo, - new UnitPresentation(style.PrintUnitsInContent, minUnitWidth: 0, gap: true)) + style.PrintUnitsInContent) : value.ToString(format, style.CultureInfo); } diff --git a/src/BenchmarkDotNet/Columns/StatisticalTestColumn.cs b/src/BenchmarkDotNet/Columns/StatisticalTestColumn.cs index f4e40ebdc7..691c6d07b1 100644 --- a/src/BenchmarkDotNet/Columns/StatisticalTestColumn.cs +++ b/src/BenchmarkDotNet/Columns/StatisticalTestColumn.cs @@ -1,3 +1,4 @@ +using BenchmarkDotNet.Helpers; using BenchmarkDotNet.Mathematics; using BenchmarkDotNet.Reports; using BenchmarkDotNet.Running; @@ -18,7 +19,7 @@ public class StatisticalTestColumn(Threshold threshold, SignificanceLevel? signi public static StatisticalTestColumn Create(string threshold, SignificanceLevel? significanceLevel = null) { - if (!Threshold.TryParse(threshold, out var parsedThreshold)) + if (!Threshold.TryParse(UnitHelper.NormalizeUnits(threshold), out var parsedThreshold)) throw new ArgumentException($"Can't parse threshold '{threshold}'"); return new StatisticalTestColumn(parsedThreshold, significanceLevel); } @@ -37,7 +38,11 @@ public override string GetValue(Summary summary, BenchmarkCase benchmarkCase, St if (current.Sample.Size == 1 && baseline.Sample.Size == 1) return "?"; + // See ZeroMeasurementHelper: moving to Pragmastat.Toolkit.Compare2 would change the + // reported verdicts, so it needs its own change rather than riding along with a bump. +#pragma warning disable CS0618 // Type or member is obsolete var test = new SimpleEquivalenceTest(MannWhitneyTest.Instance); +#pragma warning restore CS0618 var comparisonResult = test.Perform(current.Sample, baseline.Sample, Threshold, SignificanceLevel); return comparisonResult switch { diff --git a/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs b/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs index c582bd234a..671383aee7 100644 --- a/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs +++ b/src/BenchmarkDotNet/ConsoleArguments/ConfigParser.cs @@ -318,7 +318,7 @@ private static bool Validate(CommandLineOptions options, ILogger logger) if (options.StatisticalTestThreshold.IsNotBlank()) { - options.StatisticalTestThreshold = options.StatisticalTestThreshold.Trim(); + options.StatisticalTestThreshold = UnitHelper.NormalizeUnits(options.StatisticalTestThreshold.Trim()); if (IsUnitlessNumber(options.StatisticalTestThreshold)) { string original = options.StatisticalTestThreshold; diff --git a/src/BenchmarkDotNet/Environments/HostEnvironmentInfo.cs b/src/BenchmarkDotNet/Environments/HostEnvironmentInfo.cs index 051edb3e23..cca0dabf54 100644 --- a/src/BenchmarkDotNet/Environments/HostEnvironmentInfo.cs +++ b/src/BenchmarkDotNet/Environments/HostEnvironmentInfo.cs @@ -99,13 +99,8 @@ public override IEnumerable ToFormattedString() if (HardwareTimerKind != HardwareTimerKind.Unknown) { - string frequency = PerfolizerMeasurementFormatter.Instance.Format( - ChronometerFrequency.ToMeasurement(FrequencyUnit.Hz), - unitPresentation: UnitHelper.DefaultPresentation); - string resolution = PerfolizerMeasurementFormatter.Instance.Format( - ChronometerResolution.ToMeasurement(), - format: "0.000", - unitPresentation: UnitHelper.DefaultPresentation); + string frequency = UnitHelper.Format(ChronometerFrequency.ToMeasurement(FrequencyUnit.Hz)); + string resolution = UnitHelper.Format(ChronometerResolution.ToMeasurement(), format: "0.000"); string timer = HardwareTimerKind.ToString().ToUpper(); yield return $"Frequency: {frequency}, Resolution: {resolution}, Timer: {timer}"; } diff --git a/src/BenchmarkDotNet/Extensions/CommonExtensions.cs b/src/BenchmarkDotNet/Extensions/CommonExtensions.cs index 467468cc1c..b79bd41654 100644 --- a/src/BenchmarkDotNet/Extensions/CommonExtensions.cs +++ b/src/BenchmarkDotNet/Extensions/CommonExtensions.cs @@ -1,4 +1,5 @@ using BenchmarkDotNet.Columns; +using BenchmarkDotNet.Helpers; using BenchmarkDotNet.Reports; using System.Diagnostics.CodeAnalysis; @@ -17,14 +18,14 @@ public static string GetColumnTitle(this IColumn column, SummaryStyle style) switch (column.UnitType) { case UnitType.CodeSize: - return $"{column.ColumnName} [{style.CodeSizeUnit.Abbreviation}]"; + return $"{column.ColumnName} [{style.CodeSizeUnit.GetAbbreviation()}]"; case UnitType.Size: return style.SizeUnit != null - ? $"{column.ColumnName} [{style.SizeUnit.Abbreviation}]" + ? $"{column.ColumnName} [{style.SizeUnit.GetAbbreviation()}]" : $"{column.ColumnName}"; case UnitType.Time: return style.TimeUnit != null - ? $"{column.ColumnName} [{style.TimeUnit.Abbreviation}]" + ? $"{column.ColumnName} [{style.TimeUnit.GetAbbreviation()}]" : $"{column.ColumnName}"; case UnitType.Dimensionless: return column.ColumnName; diff --git a/src/BenchmarkDotNet/Extensions/StatisticsExtensions.cs b/src/BenchmarkDotNet/Extensions/StatisticsExtensions.cs index fc8eb46212..00489e5758 100644 --- a/src/BenchmarkDotNet/Extensions/StatisticsExtensions.cs +++ b/src/BenchmarkDotNet/Extensions/StatisticsExtensions.cs @@ -17,9 +17,9 @@ public static class StatisticsExtensions public static Func CreateNanosecondFormatter(this Statistics s, CultureInfo cultureInfo, string format = "N3") { var timeUnit = TimeUnit.GetBestTimeUnit(s.Mean); - return x => PerfolizerMeasurementFormatter.Instance.Format( + return x => UnitHelper.Format( TimeInterval.FromNanoseconds(x).ToMeasurement(timeUnit), - format, cultureInfo, UnitHelper.DefaultPresentation + format, cultureInfo ); } diff --git a/src/BenchmarkDotNet/Helpers/AsciiHelper.cs b/src/BenchmarkDotNet/Helpers/AsciiHelper.cs index a0ceff7252..bbe4ae77b0 100644 --- a/src/BenchmarkDotNet/Helpers/AsciiHelper.cs +++ b/src/BenchmarkDotNet/Helpers/AsciiHelper.cs @@ -5,7 +5,7 @@ internal static class AsciiHelper /// /// The 'μ' symbol /// - private const string Mu = "\u03BC"; + internal const string Mu = "\u03BC"; public static string ToAscii(this string s) { diff --git a/src/BenchmarkDotNet/Helpers/UnitHelper.cs b/src/BenchmarkDotNet/Helpers/UnitHelper.cs index 68aa903c9e..2cef38c7de 100644 --- a/src/BenchmarkDotNet/Helpers/UnitHelper.cs +++ b/src/BenchmarkDotNet/Helpers/UnitHelper.cs @@ -1,3 +1,5 @@ +using System; +using System.Globalization; using Perfolizer.Horology; using Pragmastat.Metrology; @@ -5,7 +7,32 @@ namespace BenchmarkDotNet.Helpers; public static class UnitHelper { - public static readonly UnitPresentation DefaultPresentation = new(true, 0, gap: true); + /// + /// The abbreviation to print for the given unit. + /// Perfolizer reports ASCII-only abbreviations ("us"), while BenchmarkDotNet prints the Unicode ones ("μs") + /// and downgrades them via ToAscii for terminals without Unicode support. + /// + public static string GetAbbreviation(this MeasurementUnit unit) => + unit == TimeUnit.Microsecond ? AsciiHelper.Mu + "s" : unit.Abbreviation; - public static string ToDefaultString(this TimeInterval timeInterval, string? format = null) => timeInterval.ToString(format, null, DefaultPresentation); -} \ No newline at end of file + /// + /// Formats a measurement the way BenchmarkDotNet presents it: + /// the nominal value, a gap, and the unit abbreviation. + /// + public static string Format(Measurement measurement, string? format = null, + IFormatProvider? formatProvider = null, bool printUnit = true) + { + string nominalPart = measurement.NominalValue.ToString(format, formatProvider ?? CultureInfo.InvariantCulture); + string abbreviation = measurement.Unit.GetAbbreviation(); + return printUnit && abbreviation.Length > 0 ? $"{nominalPart} {abbreviation}" : nominalPart; + } + + /// + /// Normalizes user input so that units can be spelled with Unicode abbreviations ("5μs") + /// even though Perfolizer parsers only know the ASCII ones. + /// + public static string NormalizeUnits(string s) => s.ToAscii(); + + public static string ToDefaultString(this TimeInterval timeInterval, string? format = null) => + Format(timeInterval.ToMeasurement(), format ?? "0.###"); +} diff --git a/src/BenchmarkDotNet/Mathematics/RankHelper.cs b/src/BenchmarkDotNet/Mathematics/RankHelper.cs index 6d19dce436..c84bdc4a09 100644 --- a/src/BenchmarkDotNet/Mathematics/RankHelper.cs +++ b/src/BenchmarkDotNet/Mathematics/RankHelper.cs @@ -29,7 +29,11 @@ public static int[] GetRanks(params Statistics[] stats) private static bool AreSame(Statistics x, Statistics y) { + // See ZeroMeasurementHelper: moving to Pragmastat.Toolkit.Compare2 would change the + // computed ranks, so it needs its own change rather than riding along with a bump. +#pragma warning disable CS0618 // Type or member is obsolete var test = new SimpleEquivalenceTest(MannWhitneyTest.Instance); +#pragma warning restore CS0618 var comparisonResult = test.Perform(x.Sample, y.Sample, MathHelper.DefaultThreshold, MathHelper.DefaultSignificanceLevel); return comparisonResult == ComparisonResult.Indistinguishable; } diff --git a/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs b/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs index f8a23c07ed..70b02d75bb 100644 --- a/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs +++ b/src/BenchmarkDotNet/Running/BenchmarkRunnerClean.cs @@ -376,13 +376,13 @@ private static async ValueTask PrintSummary(ILogger logger, ImmutableConfig conf if (columnWithLegends.Any()) maxNameWidth = Math.Max(maxNameWidth, columnWithLegends.Select(c => c.ColumnName.Length).Max()); if (effectiveTimeUnit != null) - maxNameWidth = Math.Max(maxNameWidth, effectiveTimeUnit.Abbreviation.ToString(cultureInfo).Length + 2); + maxNameWidth = Math.Max(maxNameWidth, effectiveTimeUnit.GetAbbreviation().ToString(cultureInfo).Length + 2); foreach (var column in columnWithLegends) logger.WriteLineHint($" {column.ColumnName.PadRight(maxNameWidth, ' ')} : {column.Legend}"); if (effectiveTimeUnit != null) - logger.WriteLineHint($" {("1 " + effectiveTimeUnit.Abbreviation).PadRight(maxNameWidth, ' ')} :" + + logger.WriteLineHint($" {("1 " + effectiveTimeUnit.GetAbbreviation()).PadRight(maxNameWidth, ' ')} :" + $" 1 {effectiveTimeUnit.FullName} ({TimeUnit.Convert(1, effectiveTimeUnit, TimeUnit.Second).ToString("0.#########", summary.GetCultureInfo())} sec)"); } diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/Infra/PerfonarTestExtensions.cs b/tests/BenchmarkDotNet.Tests/Perfonar/Infra/PerfonarTestExtensions.cs index f2828b0882..3200e9d1bf 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/Infra/PerfonarTestExtensions.cs +++ b/tests/BenchmarkDotNet.Tests/Perfonar/Infra/PerfonarTestExtensions.cs @@ -9,7 +9,7 @@ public static EntryInfo AddMetrics(this EntryInfo entry, params string[] metrics { for (int i = 0; i < metrics.Length; i++) { - var measurement = PerfolizerMeasurementFormatter.Instance.Parse(metrics[i]); + var measurement = MeasurementFormatter.Default.Parse(metrics[i]); entry.Add(new EntryInfo { IterationIndex = i, diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default01.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default01.verified.txt index 9fe1919a4e..444141873c 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default01.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default01.verified.txt @@ -3,10 +3,10 @@ MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 phys Type = Bench -| Method | Center | Spread | -|:-------|---------:|--------:| -| Foo | 11.0 ns | 0.81 ns | -| Bar | 201.0 ns | 0.81 ns | +| Method | Center | Spread | +|:-------|--------:|-------:| +| Foo | 11.0ns | 0.81ns | +| Bar | 201.0ns | 0.81ns | { "engine": { diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default02.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default02.verified.txt index a3ade54aea..dfbf9bdcaa 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default02.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default02.verified.txt @@ -3,12 +3,12 @@ MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 phys Type = Bench -| Method | Runtime | Center | Spread | -|:-------|:--------|--------:|--------:| -| Foo | Net481 | 11.0 ns | 0.81 ns | -| Bar | Net481 | 21.0 ns | 0.81 ns | -| Foo | Net70 | 31.0 ns | 0.81 ns | -| Bar | Net70 | 41.0 ns | 0.81 ns | +| Method | Runtime | Center | Spread | +|:-------|:--------|-------:|-------:| +| Foo | Net481 | 11.0ns | 0.81ns | +| Bar | Net481 | 21.0ns | 0.81ns | +| Foo | Net70 | 31.0ns | 0.81ns | +| Bar | Net70 | 41.0ns | 0.81ns | { "engine": { diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default03.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default03.verified.txt index a940585663..6d4df1ab14 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default03.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default03.verified.txt @@ -3,10 +3,10 @@ MockIntel Core i7-6700HQ CPU 2.60GHz (Max: 3.10GHz), 1 CPU, 8 logical and 4 phys Type = Bench, Runtime = Net70, Jit = RyuJit -| Method | Center | Spread | -|:-------|--------:|--------:| -| Foo | 31.0 ns | 0.81 ns | -| Bar | 41.0 ns | 0.81 ns | +| Method | Center | Spread | +|:-------|-------:|-------:| +| Foo | 31.0ns | 0.81ns | +| Bar | 41.0ns | 0.81ns | { "engine": { diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default04.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default04.verified.txt index b9b8e6556f..a021bf7ce1 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default04.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default04.verified.txt @@ -6,12 +6,12 @@ Type = Bench @Net481LegacyJit: Runtime = Net481, Jit = LegacyJit @Net70RyuJit: Runtime = Net70, Jit = RyuJit -| Method | Job | Center | Spread | -|:-------|:----------------|--------:|--------:| -| Foo | Net481LegacyJit | 11.0 ns | 0.81 ns | -| Bar | Net481LegacyJit | 21.0 ns | 0.81 ns | -| Foo | Net70RyuJit | 31.0 ns | 0.81 ns | -| Bar | Net70RyuJit | 41.0 ns | 0.81 ns | +| Method | Job | Center | Spread | +|:-------|:----------------|-------:|-------:| +| Foo | Net481LegacyJit | 11.0ns | 0.81ns | +| Bar | Net481LegacyJit | 21.0ns | 0.81ns | +| Foo | Net70RyuJit | 31.0ns | 0.81ns | +| Bar | Net70RyuJit | 41.0ns | 0.81ns | { "engine": { diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default05.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default05.verified.txt index 699a874b4e..d5d49c5ab8 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default05.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=default05.verified.txt @@ -24,48 +24,48 @@ Type = Bench, Jit = RyuJit @Net80Affinity18: Runtime = Net80, Affinity = 18 @Net90Affinity19: Runtime = Net90, Affinity = 19 -| Method | Job | Center | Spread | -|:-------|:---------------------|----------:|--------:| -| Foo | HostProcessAffinity0 | 2.00 ns | 0.81 ns | -| Bar | HostProcessAffinity0 | 7.00 ns | 0.81 ns | -| Foo | Squid | 12.00 ns | 0.81 ns | -| Bar | Squid | 17.00 ns | 0.81 ns | -| Foo | MonoAffinity2 | 22.00 ns | 0.81 ns | -| Bar | MonoAffinity2 | 27.00 ns | 0.81 ns | -| Foo | Net461Affinity3 | 32.00 ns | 0.81 ns | -| Bar | Net461Affinity3 | 37.00 ns | 0.81 ns | -| Foo | Net462Affinity4 | 42.00 ns | 0.81 ns | -| Bar | Net462Affinity4 | 47.00 ns | 0.81 ns | -| Foo | Net47Affinity5 | 52.00 ns | 0.81 ns | -| Bar | Net47Affinity5 | 57.00 ns | 0.81 ns | -| Foo | Net471Affinity6 | 62.00 ns | 0.81 ns | -| Bar | Net471Affinity6 | 67.00 ns | 0.81 ns | -| Foo | Net472Affinity7 | 72.00 ns | 0.81 ns | -| Bar | Net472Affinity7 | 77.00 ns | 0.81 ns | -| Foo | Net48Affinity8 | 82.00 ns | 0.81 ns | -| Bar | Net48Affinity8 | 87.00 ns | 0.81 ns | -| Foo | Net481Affinity9 | 92.00 ns | 0.81 ns | -| Bar | Net481Affinity9 | 97.00 ns | 0.81 ns | -| Foo | Liger | 102.00 ns | 0.81 ns | -| Bar | Liger | 107.00 ns | 0.81 ns | -| Foo | Rat | 112.00 ns | 0.81 ns | -| Bar | Rat | 117.00 ns | 0.81 ns | -| Foo | Skate | 122.00 ns | 0.81 ns | -| Bar | Skate | 127.00 ns | 0.81 ns | -| Foo | Perch | 132.00 ns | 0.81 ns | -| Bar | Perch | 137.00 ns | 0.81 ns | -| Foo | Roach | 142.00 ns | 0.81 ns | -| Bar | Roach | 147.00 ns | 0.81 ns | -| Foo | Net50Affinity15 | 152.00 ns | 0.81 ns | -| Bar | Net50Affinity15 | 157.00 ns | 0.81 ns | -| Foo | Net60Affinity16 | 162.00 ns | 0.81 ns | -| Bar | Net60Affinity16 | 167.00 ns | 0.81 ns | -| Foo | Net70Affinity17 | 172.00 ns | 0.81 ns | -| Bar | Net70Affinity17 | 177.00 ns | 0.81 ns | -| Foo | Net80Affinity18 | 182.00 ns | 0.81 ns | -| Bar | Net80Affinity18 | 187.00 ns | 0.81 ns | -| Foo | Net90Affinity19 | 192.00 ns | 0.81 ns | -| Bar | Net90Affinity19 | 197.00 ns | 0.81 ns | +| Method | Job | Center | Spread | +|:-------|:---------------------|---------:|-------:| +| Foo | HostProcessAffinity0 | 2.00ns | 0.81ns | +| Bar | HostProcessAffinity0 | 7.00ns | 0.81ns | +| Foo | Squid | 12.00ns | 0.81ns | +| Bar | Squid | 17.00ns | 0.81ns | +| Foo | MonoAffinity2 | 22.00ns | 0.81ns | +| Bar | MonoAffinity2 | 27.00ns | 0.81ns | +| Foo | Net461Affinity3 | 32.00ns | 0.81ns | +| Bar | Net461Affinity3 | 37.00ns | 0.81ns | +| Foo | Net462Affinity4 | 42.00ns | 0.81ns | +| Bar | Net462Affinity4 | 47.00ns | 0.81ns | +| Foo | Net47Affinity5 | 52.00ns | 0.81ns | +| Bar | Net47Affinity5 | 57.00ns | 0.81ns | +| Foo | Net471Affinity6 | 62.00ns | 0.81ns | +| Bar | Net471Affinity6 | 67.00ns | 0.81ns | +| Foo | Net472Affinity7 | 72.00ns | 0.81ns | +| Bar | Net472Affinity7 | 77.00ns | 0.81ns | +| Foo | Net48Affinity8 | 82.00ns | 0.81ns | +| Bar | Net48Affinity8 | 87.00ns | 0.81ns | +| Foo | Net481Affinity9 | 92.00ns | 0.81ns | +| Bar | Net481Affinity9 | 97.00ns | 0.81ns | +| Foo | Liger | 102.00ns | 0.81ns | +| Bar | Liger | 107.00ns | 0.81ns | +| Foo | Rat | 112.00ns | 0.81ns | +| Bar | Rat | 117.00ns | 0.81ns | +| Foo | Skate | 122.00ns | 0.81ns | +| Bar | Skate | 127.00ns | 0.81ns | +| Foo | Perch | 132.00ns | 0.81ns | +| Bar | Perch | 137.00ns | 0.81ns | +| Foo | Roach | 142.00ns | 0.81ns | +| Bar | Roach | 147.00ns | 0.81ns | +| Foo | Net50Affinity15 | 152.00ns | 0.81ns | +| Bar | Net50Affinity15 | 157.00ns | 0.81ns | +| Foo | Net60Affinity16 | 162.00ns | 0.81ns | +| Bar | Net60Affinity16 | 167.00ns | 0.81ns | +| Foo | Net70Affinity17 | 172.00ns | 0.81ns | +| Bar | Net70Affinity17 | 177.00ns | 0.81ns | +| Foo | Net80Affinity18 | 182.00ns | 0.81ns | +| Bar | Net80Affinity18 | 187.00ns | 0.81ns | +| Foo | Net90Affinity19 | 192.00ns | 0.81ns | +| Bar | Net90Affinity19 | 197.00ns | 0.81ns | { "engine": { diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=params01.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=params01.verified.txt index f5f36bb3b7..c110ef22cc 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=params01.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=params01.verified.txt @@ -1,7 +1,7 @@ -| Method | A | B | Center | -|:-------|---:|---:|--------:| -| Foo | 1 | 2 | 10.0 ms | -| Bar | 10 | 20 | 20.0 ms | +| Method | A | B | Center | +|:-------|---:|---:|-------:| +| Foo | 1 | 2 | 10.0ms | +| Bar | 10 | 20 | 20.0ms | { "nested": [ diff --git a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=sort01.verified.txt b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=sort01.verified.txt index 8c2956eb1a..c47fb9d2a6 100644 --- a/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=sort01.verified.txt +++ b/tests/BenchmarkDotNet.Tests/Perfonar/VerifiedFiles/Perfonar.PerfonarTableTest_key=sort01.verified.txt @@ -1,7 +1,7 @@ -| Method | Center | -|:-------|--------:| -| Bar | 20.0 ms | -| Foo | 10.0 ms | +| Method | Center | +|:-------|-------:| +| Bar | 20.0ms | +| Foo | 10.0ms | { "nested": [