From 3297d8caecd1d7a163d0d2f28be8cefe79729d05 Mon Sep 17 00:00:00 2001 From: Jane Date: Sun, 26 Jul 2026 18:25:57 +0200 Subject: [PATCH] chore: update Perfolizer from 0.6.6 to 0.7.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Perfolizer 0.7.x follows Pragmastat 11-14, which removed the configurable presentation layer from metrology: UnitPresentation, MeasurementUnitFormatter, SampleFormatter, and the settings-aware MeasurementFormatter are gone, along with AbbreviationAscii and the NumberValue/RatioValue/DisparityValue wrappers. Deciding how a measurement looks is now the consumer's job, so this moves that decision into BenchmarkDotNet instead of reconstructing the old API upstream. UnitHelper becomes that layer. It formats a measurement the way the summary tables always did (value, gap, abbreviation, invariant culture unless a culture is supplied) and owns the abbreviation shown to users: perfolizer reports microseconds as ASCII "us" since 0.7.0, while BenchmarkDotNet keeps printing "μs" and lets ConsoleLogger downgrade it for terminals without Unicode support. Cells, column headers, and the time-unit legend all resolve abbreviations through the same place, so they cannot drift apart. Since perfolizer parsers now only recognize the ASCII spelling, thresholds coming from the command line are normalized on the way in, keeping "--statisticalTest 5μs" working. Two smaller adaptations: Threshold is ambiguous between Perfolizer.Metrology and Pragmastat once both namespaces are in scope, and the significance testing API is obsolete in favor of Pragmastat.Toolkit.Compare2. Compare2 reports per-metric verdicts against typed thresholds rather than a single equivalence result, so adopting it changes every Same/Faster/Slower verdict and every rank; that is a separate migration, and the three call sites suppress the warning with a pointer to it. Perfonar table snapshots are updated rather than preserved: the exporters are internal, unreachable from any public config, and the layout shift comes from perfolizer dropping the gap in its own table renderer. Acked-by: Andrey Akinshin --- .../Tracing/NativeMemoryLogParser.cs | 5 +- .../Analysers/ZeroMeasurementHelper.cs | 9 ++ src/BenchmarkDotNet/BenchmarkDotNet.csproj | 2 +- src/BenchmarkDotNet/Columns/MetricColumn.cs | 8 +- .../Columns/StatisticColumn.cs | 5 +- .../Columns/StatisticalTestColumn.cs | 7 +- .../ConsoleArguments/ConfigParser.cs | 2 +- .../Environments/HostEnvironmentInfo.cs | 9 +- .../Extensions/CommonExtensions.cs | 7 +- .../Extensions/StatisticsExtensions.cs | 4 +- src/BenchmarkDotNet/Helpers/AsciiHelper.cs | 2 +- src/BenchmarkDotNet/Helpers/UnitHelper.cs | 33 +++++++- src/BenchmarkDotNet/Mathematics/RankHelper.cs | 4 + .../Running/BenchmarkRunnerClean.cs | 4 +- .../Perfonar/Infra/PerfonarTestExtensions.cs | 2 +- ...rfonarTableTest_key=default01.verified.txt | 8 +- ...rfonarTableTest_key=default02.verified.txt | 12 +-- ...rfonarTableTest_key=default03.verified.txt | 8 +- ...rfonarTableTest_key=default04.verified.txt | 12 +-- ...rfonarTableTest_key=default05.verified.txt | 84 +++++++++---------- ...erfonarTableTest_key=params01.verified.txt | 8 +- ....PerfonarTableTest_key=sort01.verified.txt | 8 +- 22 files changed, 143 insertions(+), 100 deletions(-) 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": [