-
-
Notifications
You must be signed in to change notification settings - Fork 987
/
Copy pathEngineTests.cs
78 lines (69 loc) · 2.96 KB
/
EngineTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System.Linq;
using System.Threading;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Engines;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Reports;
using Xunit;
using Xunit.Abstractions;
namespace BenchmarkDotNet.IntegrationTests
{
public class EngineTests : BenchmarkTestExecutor
{
public EngineTests(ITestOutputHelper output) : base(output) { }
[Fact]
public void ZeroWarmupCountIsApplied()
{
var job = Job.InProcess
.WithEvaluateOverhead(false)
.WithWarmupCount(0)
.WithIterationCount(1)
.WithInvocationCount(1)
.WithUnrollFactor(1);
var config = DefaultConfig.Instance.AddJob(job).WithOptions(ConfigOptions.DisableOptimizationsValidator);
var summary = CanExecute<FooBench>(config);
var report = summary.Reports.Single();
int workloadWarmupCount = report.AllMeasurements
.Count(m => m.Is(IterationMode.Workload, IterationStage.Warmup));
Assert.Equal(0, workloadWarmupCount);
}
[Fact]
public void AllMeasurementsArePerformedDefault() => AllMeasurementsArePerformed(Job.Default);
[Fact]
public void AllMeasurementsArePerformedInProcess() => AllMeasurementsArePerformed(Job.InProcess);
private void AllMeasurementsArePerformed(Job baseJob)
{
var job = baseJob
.WithWarmupCount(1)
.WithIterationCount(1)
.WithInvocationCount(1)
.WithUnrollFactor(1);
var config = DefaultConfig.Instance.AddJob(job).WithOptions(ConfigOptions.DisableOptimizationsValidator);
var summary = CanExecute<FooBench>(config);
var measurements = summary.Reports.Single().AllMeasurements;
Output.WriteLine("*** AllMeasurements ***");
foreach (var measurement in measurements)
Output.WriteLine(measurement.ToString());
Output.WriteLine("-----");
void Check(IterationMode mode, IterationStage stage)
{
int count = measurements.Count(m => m.Is(mode, stage));
Output.WriteLine($"Count({mode}{stage}) = {count}");
Assert.True(count > 0, $"AllMeasurements don't contain {mode}{stage}");
}
Check(IterationMode.Overhead, IterationStage.Jitting);
Check(IterationMode.Workload, IterationStage.Jitting);
Check(IterationMode.Overhead, IterationStage.Warmup);
Check(IterationMode.Overhead, IterationStage.Actual);
Check(IterationMode.Workload, IterationStage.Warmup);
Check(IterationMode.Workload, IterationStage.Actual);
Check(IterationMode.Workload, IterationStage.Result);
}
public class FooBench
{
[Benchmark]
public void Foo() => Thread.Sleep(10);
}
}
}