Beispiel #1
0
        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);
        }
Beispiel #2
0
        public void TestBuildGenericWithConstraintsWrongArgs()
        {
            var types = GenericBenchmarksBuilder.GetRunnableBenchmarks(new [] { typeof(GenericBenchmarkWithConstraintsWrongArgs <,>) });

            Assert.Single(types);
            Assert.Single(types, typeof(GenericBenchmarkWithConstraintsWrongArgs <int, char>));
        }
Beispiel #3
0
        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>));
        }
Beispiel #4
0
        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>));
        }
Beispiel #5
0
        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>));
        }
Beispiel #6
0
        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>));
        }