Skip to content

Pin SCA versioning#86

Merged
tknightnd merged 4 commits into
mainfrom
chore/sca-versioning
Sep 1, 2025
Merged

Pin SCA versioning#86
tknightnd merged 4 commits into
mainfrom
chore/sca-versioning

upgrade tools

658a0f0
Select commit
Loading
Failed to load commit list.
Sign in for the full log view
GitHub Actions / Unit tests succeeded Sep 1, 2025 in 1s

258 passed, 0 failed and 0 skipped

Tests passed successfully

✅ /home/runner/work/benchmarkdotnet.analyser/benchmarkdotnet.analyser/test/BenchmarkDotNetAnalyser.Tests.Unit/TestResults/test_results.trx

258 tests were completed in 5s with 258 passed, 0 failed and 0 skipped.

Test suite Passed Failed Skipped Time
BenchmarkDotNetAnalyser.Tests.Unit.Aggregation.BenchmarkAggregatorTests 4✅ 202ms
BenchmarkDotNetAnalyser.Tests.Unit.Analysis.BaselineDevianceAnalyserTests 9✅ 94ms
BenchmarkDotNetAnalyser.Tests.Unit.Analysis.BaselineDevianceGroupAnalyserTests 6✅ 43ms
BenchmarkDotNetAnalyser.Tests.Unit.Analysis.BenchmarkResultGroupBuilderTests 5✅ 23ms
BenchmarkDotNetAnalyser.Tests.Unit.Analysis.TelemetryBenchmarkResultAnalysisReporterTests 6✅ 8ms
BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkInfoExtensionsTests 25✅ 138ms
BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkParserTests 9✅ 56ms
BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkRunResultsReaderTests 1✅ 92ms
BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkStatisticAccessorProviderTests 60✅ 83ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.AggregateBenchmarksCommandTests 3✅ 14ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.AggregateBenchmarksExecutorTests 11✅ 67ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.AnalyseBenchmarksCommandTests 3✅ 8ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.AnalyseBenchmarksCommandValidatorTests 12✅ 795ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.AnalyseBenchmarksExecutorTests 3✅ 155ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests 10✅ 35ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.TelemetryAggregateBenchmarksExecutorArgsReporterTests 2✅ 308ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.TelemetryAnalyseBenchmarksExecutorArgsReporterTests 1✅ 491ms
BenchmarkDotNetAnalyser.Tests.Unit.Commands.VersionCommandTests 1✅ 90ms
BenchmarkDotNetAnalyser.Tests.Unit.EnumerableExtensionsTests 7✅ 356ms
BenchmarkDotNetAnalyser.Tests.Unit.Instrumentation.ColourExtensionsTests 2✅ 78ms
BenchmarkDotNetAnalyser.Tests.Unit.Instrumentation.ConsoleTelemetryTests 10✅ 528ms
BenchmarkDotNetAnalyser.Tests.Unit.Instrumentation.TelemetryExtensionsTests 4✅ 22ms
BenchmarkDotNetAnalyser.Tests.Unit.ObjectExtensionsTests 7✅ 6ms
BenchmarkDotNetAnalyser.Tests.Unit.ParameterExtensionsTests 7✅ 26ms
BenchmarkDotNetAnalyser.Tests.Unit.ProgramBootstrapTests 9✅ 61ms
BenchmarkDotNetAnalyser.Tests.Unit.ReflectionExtensionsTests 5✅ 9ms
BenchmarkDotNetAnalyser.Tests.Unit.Reporting.BenchmarkReaderTests 2✅ 61ms
BenchmarkDotNetAnalyser.Tests.Unit.Reporting.BenchmarkRecordExtensionsTests 2✅ 116ms
BenchmarkDotNetAnalyser.Tests.Unit.Reporting.CsvBenchmarksReportGeneratorTest 1✅ 3ms
BenchmarkDotNetAnalyser.Tests.Unit.Reporting.JsonBenchmarksReportGeneratorTest 1✅ 134ms
BenchmarkDotNetAnalyser.Tests.Unit.Reporting.ReporterProviderTests 4✅ 114ms
BenchmarkDotNetAnalyser.Tests.Unit.StringExtensionsTests 26✅ 295ms

✅ BenchmarkDotNetAnalyser.Tests.Unit.Aggregation.BenchmarkAggregatorTests

✅ Aggregate_BehavesAsAStack
✅ Aggregate_PreservePinned_AllUnpinned_BehavesAsAStack
✅ Aggregate_PreservePinned_EqualValues_PinnedPreserved
✅ Aggregate_PreservePinned_SinglePinned_RiosingValues_PinnedPreserved

✅ BenchmarkDotNetAnalyser.Tests.Unit.Analysis.BaselineDevianceAnalyserTests

✅ CreateAnalysis_TestValuesOutsideOfTolerance
✅ CreateAnalysis_TestValuesWithinTolerance
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_InsideBoundaries(baselineValue: 1, testValue: 0.1, tolerance: 0.9)
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_InsideBoundaries(baselineValue: 1, testValue: 1.9, tolerance: 0.9)
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_OutsideBoundaries(baselineValue: -1, testValue: 1, tolerance: 0.1)
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_OutsideBoundaries(baselineValue: -1, testValue: 1, tolerance: 0)
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_OutsideBoundaries(baselineValue: 1, testValue: -1, tolerance: 0.9)
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_OutsideBoundaries(baselineValue: 1, testValue: 0, tolerance: 0.9)
✅ CreateAnalysis_ToleranceHasPositiveNegativeBoundaries_OutsideBoundaries(baselineValue: 1, testValue: 2, tolerance: 0.9)

✅ BenchmarkDotNetAnalyser.Tests.Unit.Analysis.BaselineDevianceGroupAnalyserTests

✅ Analyse_LatestExceedsTolerance_ReturnsFalse(resultCount: 2)
✅ Analyse_LatestExceedsTolerance_ReturnsFalse(resultCount: 3)
✅ Analyse_LatestWithinTolerance_ReturnsTrue(resultCount: 0)
✅ Analyse_LatestWithinTolerance_ReturnsTrue(resultCount: 1)
✅ Analyse_LatestWithinTolerance_ReturnsTrue(resultCount: 2)
✅ Analyse_LatestWithinTolerance_ReturnsTrue(resultCount: 3)

✅ BenchmarkDotNetAnalyser.Tests.Unit.Analysis.BenchmarkResultGroupBuilderTests

✅ FromResults_EmptyRuns_EmptyResults
✅ FromResults_MultipleRuns_NamesMatch
✅ FromResults_SingleRun_EmptyRun_EmptyResults
✅ FromResults_SingletonRun_ResultsInChronoOrder
✅ FromResults_SingletonRun_ResultsMapped

✅ BenchmarkDotNetAnalyser.Tests.Unit.Analysis.TelemetryBenchmarkResultAnalysisReporterTests

✅ Report_MeetsRequirementsFalse_EmptyInnerResults_ErrorReturned
✅ Report_MeetsRequirementsFalse_InnerMessageNotReturned
✅ Report_MeetsRequirementsFalse_NonNullMessage_InnerMessageReturned
✅ Report_MeetsRequirementsFalse_NullMessage_InnerMessageReturned
✅ Report_MeetsRequirementsFalse_WhitespaceMessage_InnerMessageReturned
✅ Report_MeetsRequirementsTrue_ErrorReturned

✅ BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkInfoExtensionsTests

✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: False, filters: ["*zzz*"])
✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: True, filters: ["*a*", "z"])
✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: True, filters: ["*a*"])
✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: True, filters: ["*b*", "z"])
✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: True, filters: ["*b*"])
✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: True, filters: ["*c*", "z"])
✅ IsIncluded_ResultFiltered(ns: "a", t: "b", m: "c", expected: True, filters: ["*c*"])
✅ PinBest_DistinctValues_LowestPinned
✅ PinBest_DistinctValues_LowestPinned_MultipleRuns
✅ PinBest_SameValues_AllPinned
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 2, pinned: [False, False, False, False, False, ···], survivors: [False, False, False, False, False, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 2, pinned: [False, False, False, False, False, ···], survivors: [True, False, False, False, False, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 2, pinned: [True, True, False, False, False, ···], survivors: [True, True, False, False, False, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 2, pinned: [True, True, True, True, True, ···], survivors: [True, True, True, True, True, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 4, pinned: [False, False, True, False, True, ···], survivors: [False, False, True, False, True, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 6, pinned: [False, False, True, False, True, ···], survivors: [True, False, True, False, True, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 8, pinned: [False, False, True, False, True, ···], survivors: [True, True, True, True, True, ···])
✅ PreservePinned_InterpolatedPinBitmap_BenchmarksTrimmed(runs: 8, pinned: [True, True, True, True, True, ···], survivors: [True, True, True, True, True, ···])
✅ PreservePinned_InterpolatedPins_UnpinnedTrimmed
✅ PreservePinned_UnpinnedTrimmed
✅ TrimRunsByFilter_RunsTrimmed(filter: "*a*", expectedCount: 0, names: ["test"])
✅ TrimRunsByFilter_RunsTrimmed(filter: "*a*", expectedCount: 1, names: ["a", "b", "c"])
✅ TrimRunsByFilter_RunsTrimmed(filter: "*a*", expectedCount: 1, names: ["aaa", "bbb", "ccc"])
✅ TrimRunsByFilter_RunsTrimmed(filter: "*e*", expectedCount: 3, names: ["test", "set", "tes"])
✅ TrimRunsByFilter_RunsTrimmed(filter: "a", expectedCount: 1, names: ["a", "b", "c"])

✅ BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkParserTests

✅ GetBenchmarkEnvironment_GetCreation
✅ GetBenchmarkEnvironment_ValuesParsed(caption: "bdn1", bdnVersion: "0.1.2", os: "win10-x64", proc: "xeon E5-2673", cpuArchitecture: "X64", physicalProcs: 1, physicalCores: 2, logicalCores: 4, runtimeVersion: ".NET Core 5.0.4 (CoreCLR 5.0.421.11614, CoreFX 5.0"···, cliVersion: "5.0.201")
✅ GetBenchmarkEnvironment_ValuesParsed(caption: "bdn2", bdnVersion: "1.2.3", os: "ubuntu-x64", proc: "E5-2673", cpuArchitecture: "x64", physicalProcs: 2, physicalCores: 4, logicalCores: 8, runtimeVersion: ".NET Core 5.0.4", cliVersion: "5.0.201")
✅ GetBenchmarkResults_NoStats_ValuesParsed(fullName: "fullName1", benchmarkNamespace: "benchmarknamespace1", benchmarkType: "benchmarktype1", benchmarkMethod: "benchmarkMethod1", benchmarkParameters: "benchmarkparams1")
✅ GetBenchmarkResults_NoStats_ValuesParsed(fullName: "fullName2", benchmarkNamespace: "benchmarknamespace2", benchmarkType: "benchmarktype2", benchmarkMethod: "benchmarkMethod2", benchmarkParameters: "benchmarkparams2")
✅ GetBenchmarkResults_ValuesParsed(fullName: "fullName1", benchmarkNamespace: "benchmarknamespace1", benchmarkType: "benchmarktype1", benchmarkMethod: "benchmarkMethod1", benchmarkParameters: "benchmarkparams1", seedStats: 0.1)
✅ GetBenchmarkResults_ValuesParsed(fullName: "fullName2", benchmarkNamespace: "benchmarknamespace2", benchmarkType: "benchmarktype2", benchmarkMethod: "benchmarkMethod2", benchmarkParameters: "benchmarkparams2", seedStats: 0.001)
✅ GetBenchmarkResults_WithoutMemory_ValuesParsed(fullName: "fullName1", benchmarkNamespace: "benchmarknamespace1", benchmarkType: "benchmarktype1", benchmarkMethod: "benchmarkMethod1", benchmarkParameters: "benchmarkparams1", seedStats: 0.1)
✅ GetBenchmarkResults_WithoutMemory_ValuesParsed(fullName: "fullName2", benchmarkNamespace: "benchmarknamespace2", benchmarkType: "benchmarktype2", benchmarkMethod: "benchmarkMethod2", benchmarkParameters: "benchmarkparams2", seedStats: 0.001)

✅ BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkRunResultsReaderTests

✅ GetBenchmarkResults_ResultsParsed

✅ BenchmarkDotNetAnalyser.Tests.Unit.Benchmarks.BenchmarkStatisticAccessorProviderTests

✅ GetAccessor_AccessorFound_AccessorEvaluates(name: "", expected: 3)
✅ GetAccessor_AccessorFound_AccessorEvaluates(name: "MaxTime", expected: 2)
✅ GetAccessor_AccessorFound_AccessorEvaluates(name: "MeanTime", expected: 3)
✅ GetAccessor_AccessorFound_AccessorEvaluates(name: "MedianTime", expected: 4)
✅ GetAccessor_AccessorFound_AccessorEvaluates(name: "MinTime", expected: 1)
✅ GetAccessor_AccessorFound(name: "BytesAllocatedPerOp", upper: False)
✅ GetAccessor_AccessorFound(name: "BytesAllocatedPerOp", upper: True)
✅ GetAccessor_AccessorFound(name: "Gen0Collections", upper: False)
✅ GetAccessor_AccessorFound(name: "Gen0Collections", upper: True)
✅ GetAccessor_AccessorFound(name: "MaxTime", upper: False)
✅ GetAccessor_AccessorFound(name: "MaxTime", upper: True)
✅ GetAccessor_AccessorFound(name: "MeanTime", upper: False)
✅ GetAccessor_AccessorFound(name: "MeanTime", upper: True)
✅ GetAccessor_AccessorFound(name: "MedianTime", upper: False)
✅ GetAccessor_AccessorFound(name: "MedianTime", upper: True)
✅ GetAccessor_AccessorFound(name: "MinTime", upper: False)
✅ GetAccessor_AccessorFound(name: "MinTime", upper: True)
✅ GetAccessor_NonEmptyStringReturnsDefault
✅ GetAccessor_NullName_DefaultReturned(name: " ")
✅ GetAccessor_NullName_DefaultReturned(name: "")
✅ GetAccessor_NullName_DefaultReturned(name: "\t")
✅ GetAccessor_NullName_DefaultReturned(name: null)
✅ GetAccessorInfos_OrderedReturn
✅ GetAccessorInfos_SingleIsDefault
✅ GetAccessorInfos_UniquesReturned
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "BytesAllocatedPerOp")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "Gen0Collections")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "Gen1Collections")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "Gen2Collections")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "MaxTime")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "MeanTime")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "MedianTime")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates_2(name: "MinTime")
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "", expected: 3)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "BytesAllocatedPerOp", expected: 9)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "Gen0Collections", expected: 5)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "Gen1Collections", expected: 6)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "Gen2Collections", expected: 7)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "MaxTime", expected: 2)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "MeanTime", expected: 3)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "MedianTime", expected: 4)
✅ GetNullableAccessor_AccessorFound_AccessorEvaluates(name: "MinTime", expected: 1)
✅ GetNullableAccessor_AccessorFound(name: "BytesAllocatedPerOp", upper: False)
✅ GetNullableAccessor_AccessorFound(name: "BytesAllocatedPerOp", upper: True)
✅ GetNullableAccessor_AccessorFound(name: "Gen0Collections", upper: False)
✅ GetNullableAccessor_AccessorFound(name: "Gen0Collections", upper: True)
✅ GetNullableAccessor_AccessorFound(name: "MaxTime", upper: False)
✅ GetNullableAccessor_AccessorFound(name: "MaxTime", upper: True)
✅ GetNullableAccessor_AccessorFound(name: "MeanTime", upper: False)
✅ GetNullableAccessor_AccessorFound(name: "MeanTime", upper: True)
✅ GetNullableAccessor_AccessorFound(name: "MedianTime", upper: False)
✅ GetNullableAccessor_AccessorFound(name: "MedianTime", upper: True)
✅ GetNullableAccessor_AccessorFound(name: "MinTime", upper: False)
✅ GetNullableAccessor_AccessorFound(name: "MinTime", upper: True)
✅ GetNullableAccessor_NonEmptyStringReturnsDefault
✅ GetNullableAccessor_NullName_DefaultReturned(name: " ")
✅ GetNullableAccessor_NullName_DefaultReturned(name: "")
✅ GetNullableAccessor_NullName_DefaultReturned(name: "\t")
✅ GetNullableAccessor_NullName_DefaultReturned(name: null)

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.AggregateBenchmarksCommandTests

✅ OnExecuteAsync_NoValidationError_ExecuteError_ReturnsError
✅ OnExecuteAsync_NoValidationError_ExecuteOk_ReturnsOk
✅ OnExecuteAsync_ValidationError_ReturnsError

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.AggregateBenchmarksExecutorTests

✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 0, newFileCount: 0)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 0, newFileCount: 1)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 1, newFileCount: 0)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 1, newFileCount: 1)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 3, newFileCount: 0)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 3, newFileCount: 1)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 4, newFileCount: 0)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 4, newFileCount: 1)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 7, newFileCount: 0)
✅ ExecuteAsync_BenchmarksAggregated_AggregateWritten(aggregateCount: 7, newFileCount: 1)
✅ ExecuteAsync_Success_ConsoleMessagesSent

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.AnalyseBenchmarksCommandTests

✅ OnExecuteAsync_NoValidationError_ExecuteError_ReturnsError
✅ OnExecuteAsync_NoValidationError_ExecuteOk_ReturnsOk
✅ OnExecuteAsync_ValidationError_ReturnsError

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.AnalyseBenchmarksCommandValidatorTests

✅ Validate_AggregatesPath_InvalidPath
✅ Validate_AggregatesPath_ValidPath
✅ Validate_MaxErrors_Default
✅ Validate_MaxErrors_InvalidForm
✅ Validate_MaxErrors_NegativeValue
✅ Validate_MaxErrors_ValidForm
✅ Validate_Statistic_KnownStatistic_Passes
✅ Validate_Statistic_UnknownStatistic_ExceptionThrown
✅ Validate_Tolerance_Default
✅ Validate_Tolerance_InvalidForm
✅ Validate_Tolerance_NegativeValue
✅ Validate_Tolerance_ValidForm

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.AnalyseBenchmarksExecutorTests

✅ ExecuteAsync_EmptyBenchmarks_ReturnsFalse
✅ ExecuteAsync_SingleBenchmark_DoesNot_MeetsRequirements_ReturnsFalse
✅ ExecuteAsync_SingleBenchmark_MeetsRequirements_ReturnsTrue

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests

✅ GetCommandOptionName_NameFound_NoAttribute(propName: "Count")
✅ GetCommandOptionName_NameFound_NoAttribute(propName: "Name")
✅ GetCommandOptionName_NameFound(commandType: typeof(BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests+OptionsStubCommand), propName: "Count", expected: "test")
✅ GetCommandOptionName_NameFound(commandType: typeof(BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests+OptionsStubCommand), propName: "Verbose", expected: "verbose")
✅ GetCommandOptionName_NameNotFound(commandType: typeof(BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests+OptionsStubCommand), propName: " ")
✅ GetCommandOptionName_NameNotFound(commandType: typeof(BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests+OptionsStubCommand), propName: "")
✅ GetCommandOptionName_NameNotFound(commandType: typeof(BenchmarkDotNetAnalyser.Tests.Unit.Commands.CommandExtensionsTests+OptionsStubCommand), propName: "zzz")
✅ GetCommandOptionName_NameNotFound(commandType: typeof(object), propName: "Length")
✅ ToReturnCode_ValuesMapped(input: False, expected: 1)
✅ ToReturnCode_ValuesMapped(input: True, expected: 0)

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.TelemetryAggregateBenchmarksExecutorArgsReporterTests

✅ Report_DetailsSentToTelemetry
✅ Report_TagsSentToTelemetry

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.TelemetryAnalyseBenchmarksExecutorArgsReporterTests

✅ Report_TelemetryReceivesArgsDetails

✅ BenchmarkDotNetAnalyser.Tests.Unit.Commands.VersionCommandTests

✅ OnExecuteAsync_OkReturned

✅ BenchmarkDotNetAnalyser.Tests.Unit.EnumerableExtensionsTests

✅ MinBy_Decimal_EmptySequence_ExceptionMessageNonEmpty
✅ MinBy_Decimal_EmptySequence_ExceptionThrown
✅ MinBy_Decimal_FindsMinByReverse
✅ MinBy_Decimal_Reversed_FindsMinByReverse
✅ MinBy_Decimal_StringValueProjections_FindsMinByReverse
✅ MinBy_Decimal_ValuesEqual_FindsMinByReverse
✅ ToInfinity_ValuesRepeated

✅ BenchmarkDotNetAnalyser.Tests.Unit.Instrumentation.ColourExtensionsTests

✅ Colourise_NullValue_ReturnsNull
✅ Colourise_ReturnsAnnotatedValue

✅ BenchmarkDotNetAnalyser.Tests.Unit.Instrumentation.ConsoleTelemetryTests

✅ Commentary_NonVerbose_MessageNotWritten
✅ Commentary_Verbose_MessageWritten
✅ Error_NonVerbose_MessageWritten
✅ Error_Verbose_MessageWritten
✅ Info_NonVerbose_MessageWritten
✅ Info_Verbose_MessageWritten
✅ Success_NonVerbose_MessageWritten
✅ Success_Verbose_MessageWritten
✅ Warning_NonVerbose_MessageWritten
✅ Warning_Verbose_MessageWritten

✅ BenchmarkDotNetAnalyser.Tests.Unit.Instrumentation.TelemetryExtensionsTests

✅ InvokeWithLogging_ExceptionThrown
✅ InvokeWithLogging_ResultReturned
✅ InvokeWithLoggingAsync_ExceptionThrown
✅ InvokeWithLoggingAsync_ResultReturned

✅ BenchmarkDotNetAnalyser.Tests.Unit.ObjectExtensionsTests

✅ Pipe_NullSelector_ExceptionThrown
✅ Pipe_NullValue_ExceptionThrown
✅ Pipe_ValuePiped
✅ PipeDo_ValuePiped
✅ PipeIfNotNull_NullSelector_ExceptionThrown
✅ PipeIfNotNull_NullValue_NullNotPropagated
✅ PipeIfNotNull_ValuePiped

✅ BenchmarkDotNetAnalyser.Tests.Unit.ParameterExtensionsTests

✅ ArgNotNull_ExceptionThrown(paramName: "")
✅ ArgNotNull_ExceptionThrown(paramName: "abc")
✅ ArgNotNull_NoExceptionThrown(value: "")
✅ ArgNotNull_NoExceptionThrown(value: "abc")
✅ InvalidOpArg_PredicateNull_ExceptionThrown
✅ InvalidOpArg_PredicatePasses_ValueReturned
✅ InvalidOpArg_PredicateTrue_ExceptionThrown

✅ BenchmarkDotNetAnalyser.Tests.Unit.ProgramBootstrapTests

✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.Aggregation.IBenchmarkAggregator))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.Benchmarks.IBenchmarkInfoProvider))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.Benchmarks.IBenchmarkRunInfoProvider))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.Commands.IAggregateBenchmarksExecutor))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.Commands.IAnalyseBenchmarksExecutor))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.Instrumentation.ITelemetry))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(BenchmarkDotNetAnalyser.IO.IFileFinder))
✅ CreateServiceCollection_ServiceInjected(serviceType: typeof(McMaster.Extensions.CommandLineUtils.IConsole))
✅ GetDescription_SolidTextReturned

✅ BenchmarkDotNetAnalyser.Tests.Unit.ReflectionExtensionsTests

✅ GetAttributeValue_AttributeNotRetrieved
✅ GetAttributeValue_CopyrightValueRetrieved
✅ GetMemberAttributePairs_UnknownAttribute_ReturnsEmpty
✅ GetMemberAttributePairs_UsedAttribute_ReturnsNonEmpty
✅ GetMemberAttributePairs_UsedAttributeInBaseClass_ReturnsNonEmpty

✅ BenchmarkDotNetAnalyser.Tests.Unit.Reporting.BenchmarkReaderTests

✅ GetBenchmarkAsync_GetCsv_FilterApplied
✅ GetBenchmarkAsync_GetCsv_NoFilterApplied

✅ BenchmarkDotNetAnalyser.Tests.Unit.Reporting.BenchmarkRecordExtensionsTests

✅ ToCsvRows_Mapped
✅ ToCsvRows_TagsMapped

✅ BenchmarkDotNetAnalyser.Tests.Unit.Reporting.CsvBenchmarksReportGeneratorTest

✅ GenerateAsync_BenchmarksFlowThrough

✅ BenchmarkDotNetAnalyser.Tests.Unit.Reporting.JsonBenchmarksReportGeneratorTest

✅ GenerateAsync_BenchmarksFlowThrough

✅ BenchmarkDotNetAnalyser.Tests.Unit.Reporting.ReporterProviderTests

✅ GetReporter_ByString_KnownKind_ReturnsReporter
✅ GetReporter_ByString_UnknownKind_ThrowsException
✅ GetReporter_KnownKind_ReturnsReporter
✅ GetReporter_UnknownKind_ThrowsException

✅ BenchmarkDotNetAnalyser.Tests.Unit.StringExtensionsTests

✅ IsMatch_NegativeMatches(value: "Époisses", pattern: "Epoisses")
✅ IsMatch_NegativeMatches(value: "System", pattern: " ")
✅ IsMatch_NegativeMatches(value: "System", pattern: " system")
✅ IsMatch_NegativeMatches(value: "System", pattern: "")
✅ IsMatch_NegativeMatches(value: "system", pattern: "*no*")
✅ IsMatch_NegativeMatches(value: "System", pattern: "*sys")
✅ IsMatch_NegativeMatches(value: "System", pattern: "sistem")
✅ IsMatch_NegativeMatches(value: "System", pattern: "system ")
✅ IsMatch_PositiveMatches(value: "Époisses", pattern: "Époisses")
✅ IsMatch_PositiveMatches(value: "System", pattern: "*")
✅ IsMatch_PositiveMatches(value: "System", pattern: "*sys*")
✅ IsMatch_PositiveMatches(value: "System", pattern: "*system")
✅ IsMatch_PositiveMatches(value: "System", pattern: "sys*")
✅ IsMatch_PositiveMatches(value: "System", pattern: "system")
✅ IsMatch_PositiveMatches(value: "System", pattern: "SYSTEM")
✅ IsMatch_PositiveMatches(value: "System", pattern: "system*")
✅ IsMatch_PositiveMatches(value: "System", pattern: null)
✅ Join_DelimitersInterspersed
✅ Join_SegmentsInterspersed
✅ Join_SegmentsPreserved
✅ ToDecimal_InvalidNumber_ExceptionThrown
✅ ToDecimal_Passes
✅ ToInt_InvalidNumber_ExceptionThrown
✅ ToInt_Passes
✅ ToPercentageDecimal_InvalidNumber_ExceptionThrown
✅ ToPercentageDecimal_Passes