internal static (bool allTypesValid, IReadOnlyList <Type> runnable) GetTypesWithRunnableBenchmarks(IEnumerable <Type> types, IEnumerable <Assembly> assemblies, ILogger logger) { var validRunnableTypes = new List <Type>(); foreach (var type in types) { if (type.ContainsRunnableBenchmarks()) { validRunnableTypes.AddRange(GenericBenchmarksBuilder.BuildGenericsIfNeeded(type).Where(tuple => tuple.isSuccess).Select(tuple => tuple.result)); } else { logger.WriteLineError($"Type {type} is invalid. Only public, non-generic (closed generic types with public parameterless ctors are supported), non-abstract, non-sealed, non-static types with public instance [Benchmark] method(s) are supported."); return(false, Array.Empty <Type>()); } } foreach (var assembly in assemblies) { validRunnableTypes.AddRange(GenericBenchmarksBuilder.GetRunnableBenchmarks(assembly.GetRunnableBenchmarks())); } return(true, validRunnableTypes); }
public void TestBuildGenericWithConstraintsWrongArgs() { var types = GenericBenchmarksBuilder.GetRunnableBenchmarks(new [] { typeof(GenericBenchmarkWithConstraintsWrongArgs <,>) }); Assert.Single(types); Assert.Single(types, typeof(GenericBenchmarkWithConstraintsWrongArgs <int, char>)); }
public void TestBuildGenericWithConstraints() { var types = GenericBenchmarksBuilder.GetRunnableBenchmarks(new [] { typeof(GenericBenchmarkWithConstraints <,>) }); Assert.Equal(2, types.Length); Assert.Single(types, typeof(GenericBenchmarkWithConstraints <int, char>)); Assert.Single(types, typeof(GenericBenchmarkWithConstraints <char, byte>)); }
public void TestBuildGenericWithWrongAttributes() { var types = GenericBenchmarksBuilder.GetRunnableBenchmarks(new [] { typeof(GenericBenchmarkWithWrongAttribute <,>) }); Assert.Equal(2, types.Length); Assert.Single(types, typeof(GenericBenchmarkWithWrongAttribute <int, char>)); Assert.Single(types, typeof(GenericBenchmarkWithWrongAttribute <char, string>)); }
public void TestBuildGenericWithThreeArguments() { var types = GenericBenchmarksBuilder.GetRunnableBenchmarks(new [] { typeof(ThreeArgGenericBenchmark <, ,>) }); Assert.Equal(2, types.Length); Assert.Single(types, typeof(ThreeArgGenericBenchmark <int, char, string>)); Assert.Single(types, typeof(ThreeArgGenericBenchmark <char, string, byte>)); }
public void TestBuildGenericWithOneArgument() { var types = GenericBenchmarksBuilder.GetRunnableBenchmarks(new [] { typeof(OneArgGenericBenchmark <>) }); Assert.Equal(2, types.Length); Assert.Single(types, typeof(OneArgGenericBenchmark <int>)); Assert.Single(types, typeof(OneArgGenericBenchmark <char>)); }