Skip to content

Commit 276f1ad

Browse files
Fix EngineStage.Run for warmupCount=0 (fixes #2185) (#2186)
1 parent ddd2f31 commit 276f1ad

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

src/BenchmarkDotNet/Engines/EngineStage.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,12 @@ protected Measurement RunIteration(IterationMode mode, IterationStage stage, int
2323
internal List<Measurement> Run(IStoppingCriteria criteria, long invokeCount, IterationMode mode, IterationStage stage, int unrollFactor)
2424
{
2525
var measurements = new List<Measurement>(criteria.MaxIterationCount);
26+
if (criteria.Evaluate(measurements).IsFinished)
27+
{
28+
WriteLine();
29+
return measurements;
30+
}
31+
2632
int iterationCounter = 0;
2733
while (true)
2834
{
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Linq;
2+
using System.Threading;
3+
using BenchmarkDotNet.Attributes;
4+
using BenchmarkDotNet.Configs;
5+
using BenchmarkDotNet.Engines;
6+
using BenchmarkDotNet.Jobs;
7+
using BenchmarkDotNet.Reports;
8+
using Xunit;
9+
using Xunit.Abstractions;
10+
11+
namespace BenchmarkDotNet.IntegrationTests
12+
{
13+
public class JobTests : BenchmarkTestExecutor
14+
{
15+
public JobTests(ITestOutputHelper output) : base(output) { }
16+
17+
[Fact]
18+
public void ZeroWarmupCountIsApplied()
19+
{
20+
var job = Job.Default
21+
.WithEvaluateOverhead(false)
22+
.WithWarmupCount(0)
23+
.WithIterationCount(1)
24+
.WithInvocationCount(1)
25+
.WithUnrollFactor(1);
26+
var config = DefaultConfig.Instance.AddJob(job).WithOptions(ConfigOptions.DisableOptimizationsValidator);
27+
var summary = CanExecute<ZeroWarmupBench>(config);
28+
var report = summary.Reports.Single();
29+
int workloadWarmupCount = report.AllMeasurements
30+
.Count(m => m.Is(IterationMode.Workload, IterationStage.Warmup));
31+
Assert.Equal(0, workloadWarmupCount);
32+
}
33+
34+
public class ZeroWarmupBench
35+
{
36+
[Benchmark]
37+
public void Foo() => Thread.Sleep(10);
38+
}
39+
}
40+
}

0 commit comments

Comments
 (0)