Skip to content

Commit 9938c3c

Browse files
authored
include argument and param names in --filter (#2132)
1 parent 97c2d14 commit 9938c3c

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

src/BenchmarkDotNet/ConsoleArguments/CorrectionsSuggester.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using System.Linq;
44
using BenchmarkDotNet.Configs;
5+
using BenchmarkDotNet.Exporters;
56
using BenchmarkDotNet.Extensions;
67
using BenchmarkDotNet.Running;
78
using JetBrains.Annotations;
@@ -21,7 +22,7 @@ public CorrectionsSuggester(IReadOnlyList<Type> types)
2122
{
2223
foreach (var benchmarkCase in benchmarkRunInfo.BenchmarksCases)
2324
{
24-
string fullBenchmarkName = benchmarkCase.Descriptor.GetFilterName();
25+
string fullBenchmarkName = FullNameProvider.GetBenchmarkName(benchmarkCase);
2526

2627
actualFullBenchmarkNames.Add(fullBenchmarkName);
2728

src/BenchmarkDotNet/Filters/GlobFilter.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
using System;
12
using System.Linq;
23
using System.Text.RegularExpressions;
4+
using BenchmarkDotNet.Exporters;
35
using BenchmarkDotNet.Running;
46

57
namespace BenchmarkDotNet.Filters
@@ -16,9 +18,10 @@ public class GlobFilter : IFilter
1618
public bool Predicate(BenchmarkCase benchmarkCase)
1719
{
1820
var benchmark = benchmarkCase.Descriptor.WorkloadMethod;
19-
string fullBenchmarkName = benchmarkCase.Descriptor.GetFilterName();
21+
string nameWithoutArgs = benchmarkCase.Descriptor.GetFilterName();
22+
string fullBenchmarkName = FullNameProvider.GetBenchmarkName(benchmarkCase);
2023

21-
return patterns.Any(pattern => pattern.IsMatch(fullBenchmarkName));
24+
return patterns.Any(pattern => pattern.IsMatch(fullBenchmarkName) || pattern.IsMatch(nameWithoutArgs));
2225
}
2326

2427
internal static Regex[] ToRegex(string[] patterns)

tests/BenchmarkDotNet.Tests/GlobFilterTests.cs

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System.Linq;
2+
using System.Threading;
3+
using ApprovalUtilities.Utilities;
24
using BenchmarkDotNet.Attributes;
35
using BenchmarkDotNet.Filters;
46
using BenchmarkDotNet.Running;
@@ -27,9 +29,38 @@ public void TheFilterIsCaseInsensitive(string pattern, bool expected)
2729
Assert.Equal(expected, filter.Predicate(benchmarkCase));
2830
}
2931

30-
public class TypeWithBenchmarks
32+
[Theory]
33+
[InlineData(nameof(TypeWithBenchmarksAndParams), 0)] // type name
34+
[InlineData("typewithbenchmarksandparams", 0)] // type name lowercase
35+
[InlineData("TYPEWITHBENCHMARKSANDPARAMS", 0)] // type name uppercase
36+
[InlineData("*TypeWithBenchmarksAndParams*", 2)] // regular expression
37+
[InlineData("*typewithbenchmarksandparams*", 2)] // regular expression lowercase
38+
[InlineData("*TYPEWITHBENCHMARKSANDPARAMS*", 2)] // regular expression uppercase
39+
[InlineData("*", 2)]
40+
[InlineData("WRONG", 0)]
41+
[InlineData("*stillWRONG*", 0)]
42+
[InlineData("BenchmarkDotNet.Tests.TypeWithBenchmarksAndParams.TheBenchmark", 2)]
43+
[InlineData("BenchmarkDotNet.Tests.TypeWithBenchmarksAndParams.TheBenchmark(A: 100)", 1)]
44+
public void TheFilterWorksWithParams(string pattern, int expectedBenchmarks)
3145
{
32-
[Benchmark] public void TheBenchmark() { }
46+
var benchmarkCases = BenchmarkConverter.TypeToBenchmarks(typeof(TypeWithBenchmarksAndParams)).BenchmarksCases;
47+
48+
var filter = new GlobFilter(new[] { pattern });
49+
50+
Assert.Equal(expectedBenchmarks, benchmarkCases.Where(benchmarkCase => filter.Predicate(benchmarkCase)).Count());
3351
}
3452
}
53+
54+
public class TypeWithBenchmarks
55+
{
56+
[Benchmark] public void TheBenchmark() { }
57+
}
58+
59+
public class TypeWithBenchmarksAndParams
60+
{
61+
[Params(100, 200)]
62+
public int A { get; set; }
63+
64+
[Benchmark] public void TheBenchmark() { }
65+
}
3566
}

0 commit comments

Comments
 (0)