-
-
Notifications
You must be signed in to change notification settings - Fork 986
/
Copy pathJitRuntimeValidationTest.cs
79 lines (69 loc) · 3.25 KB
/
JitRuntimeValidationTest.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
79
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Columns;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Environments;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Portability;
using BenchmarkDotNet.Tests.Loggers;
using BenchmarkDotNet.Tests.XUnit;
using System.Collections.Generic;
using Xunit;
using Xunit.Abstractions;
namespace BenchmarkDotNet.IntegrationTests
{
public class JitRuntimeValidationTest : BenchmarkTestExecutor
{
public JitRuntimeValidationTest(ITestOutputHelper output) : base(output) { }
// private const string LegacyJitNotAvailableForMono = "// ERROR: LegacyJIT is requested but it is not available for Mono";
private const string RyuJitNotAvailable = "// ERROR: RyuJIT is requested but it is not available in current environment";
private const string ToolchainSupportsOnlyRyuJit = "Currently dotnet cli toolchain supports only RyuJit";
[TheoryEnvSpecific("CLR is a valid job only on Windows", EnvRequirement.WindowsOnly)]
[InlineData(Jit.LegacyJit, Platform.X86, null)]
[InlineData(Jit.LegacyJit, Platform.X64, null)]
[InlineData(Jit.RyuJit, Platform.X86, RyuJitNotAvailable)]
[InlineData(Jit.RyuJit, Platform.X64, null)]
public void CheckClrOnWindows(Jit jit, Platform platform, string? errorMessage)
{
Verify(ClrRuntime.Net462, jit, platform, errorMessage);
}
// [TheoryWindowsOnly("CLR is a valid job only on Windows")]
// [InlineData(Jit.LegacyJit, Platform.X86, LegacyJitNotAvailableForMono)]
// [InlineData(Jit.LegacyJit, Platform.X64, LegacyJitNotAvailableForMono)]
// [InlineData(Jit.RyuJit, Platform.X86, RyuJitNotAvailable)]
// [InlineData(Jit.RyuJit, Platform.X64, RyuJitNotAvailable)]
// public void CheckMono(Jit jit, Platform platform, string errorMessage)
// {
// Verify(Runtime.Mono, jit, platform, errorMessage);
// }
public static IEnumerable<object[]> CheckCore_Arguments()
{
yield return new object[] { Jit.LegacyJit, Platform.X86, ToolchainSupportsOnlyRyuJit };
yield return new object[] { Jit.LegacyJit, Platform.X64, ToolchainSupportsOnlyRyuJit };
yield return new object[] { Jit.RyuJit, RuntimeInformation.GetCurrentPlatform(), null };
}
[Theory]
[MemberData(nameof(CheckCore_Arguments))]
public void CheckCore(Jit jit, Platform platform, string errorMessage)
{
Verify(CoreRuntime.Core80, jit, platform, errorMessage);
}
private void Verify(Runtime runtime, Jit jit, Platform platform, string? errorMessage)
{
var logger = new OutputLogger(Output);
var config = ManualConfig.CreateEmpty()
.AddJob(Job.Dry.WithPlatform(platform).WithJit(jit).WithRuntime(runtime))
.AddLogger(logger)
.AddColumnProvider(DefaultColumnProviders.Instance);
CanExecute<TestBenchmark>(config, fullValidation: errorMessage is null);
if (errorMessage is not null)
{
Assert.Contains(errorMessage, logger.GetLog());
}
}
public class TestBenchmark
{
[Benchmark]
public void Benchmark() { }
}
}
}