예제 #1
0
        public void CanAnalyseMultipleBenchmarksInMultipleClasses()
        {
            var code =
                @"using System;
using MiniBench.Core;

namespace MiniBench.Tests
{
    class MultiTest1
    {
        [Benchmark]
        public void SimpleBenchmark1() {}

        [Benchmark]
        internal void SimpleBenchmark2() {}

        [Benchmark]
        public void SimpleBenchmark3() {}

        public void SimpleNOTBenchmark() {}
    }

    class MultiTest2
    {
        [Benchmark]
        public void SimpleBenchmark1() {}
    }

    class MultiTest3
    {
        public void SimpleNOTBenchmark() {}
    }
}";

            Console.WriteLine(code);
            var syntaxTree = CSharpSyntaxTree.ParseText(code, options: parseOptions, encoding: defaultEncoding);
            var results    = new Analyser().AnalyseBenchmark(syntaxTree, "TestFile").ToList();

            Assert.Equal(4, results.Count());
            Assert.True(results.All(r => r.NamespaceName == "MiniBench.Tests"));

            // class MultiTest1
            Assert.Equal(3, results.Count(r => r.ClassName == "MultiTest1"));
            Assert.Equal(1, results.Count(r => r.ClassName == "MultiTest1" && r.MethodName == "SimpleBenchmark1"));
            Assert.Equal(1, results.Count(r => r.ClassName == "MultiTest1" && r.MethodName == "SimpleBenchmark2"));
            Assert.Equal(1, results.Count(r => r.ClassName == "MultiTest1" && r.MethodName == "SimpleBenchmark3"));
            Assert.Equal(0, results.Count(r => r.ClassName == "MultiTest1" && r.MethodName == "SimpleNOTBenchmark"));

            // class MultiTest2
            Assert.Equal(1, results.Count(r => r.ClassName == "MultiTest2"));
            Assert.Equal(1, results.Count(r => r.ClassName == "MultiTest2" && r.MethodName == "SimpleBenchmark1"));

            // class MultiTest3
            Assert.Equal(0, results.Count(r => r.ClassName == "MultiTest3"));
            Assert.Equal(0, results.Count(r => r.ClassName == "MultiTest3" && r.MethodName == "SimpleNOTBenchmark"));
        }
예제 #2
0
        public void CanAnalyseSetupAttribute()
        {
            var code =
                @"using System;
using MiniBench.Core;

namespace MiniBench.Tests
{
    public class SimpleTest
    {
        [Setup]
        public void SetupMethod() {}

        [Benchmark]
        public void SimpleBenchmark() {}
    }
}";

            Console.WriteLine(code);
            var syntaxTree = CSharpSyntaxTree.ParseText(code, options: parseOptions, encoding: defaultEncoding);
            var results    = new Analyser().AnalyseBenchmark(syntaxTree, "TestFile").ToList();

            Assert.Equal(1, results.Count());
            var benchmarkInfo = results.FirstOrDefault();

            Assert.NotNull(benchmarkInfo);

            Assert.Equal("SetupMethod", benchmarkInfo.SetupMethod);
        }
예제 #3
0
        public void CanAnalyseSimpleBenchmark()
        {
            var code =
                @"using System;
using MiniBench.Core;

namespace MiniBench.Tests
{
    public class SimpleTest
    {
        [Benchmark]
        public void SimpleBenchmark() {}
    }
}";

            Console.WriteLine(code);
            var syntaxTree = CSharpSyntaxTree.ParseText(code, options: parseOptions, encoding: defaultEncoding);
            var results    = new Analyser().AnalyseBenchmark(syntaxTree, "TestFile").ToList();

            Assert.Equal(1, results.Count());
            var benchmarkInfo = results.FirstOrDefault();

            Assert.NotNull(benchmarkInfo);

            Assert.Equal("MiniBench.Tests", benchmarkInfo.NamespaceName);
            Assert.Equal("SimpleTest", benchmarkInfo.ClassName);
            Assert.Equal("SimpleBenchmark", benchmarkInfo.MethodName);
            Assert.Equal("TestFile_MiniBench_Tests_SimpleTest_SimpleBenchmark", benchmarkInfo.GeneratedClassName);

            Assert.Equal(false, benchmarkInfo.GenerateBlackhole);
            Assert.Empty(benchmarkInfo.ParametersToInject);
            Assert.Null(benchmarkInfo.ParamsWithSteps);
            Assert.Null(benchmarkInfo.ParamsFieldName);
            Assert.Null(benchmarkInfo.SetupMethod);
        }
예제 #4
0
        public void CanAnalyseParamsWithStepsForProperty()
        {
            var code =
                @"using System;
using MiniBench.Core;

namespace MiniBench.Tests
{
    public class BlackholeTest
    {
        [ParamsWithSteps(start:1, end:10, step:1)]
        public int SomeProperty { get; set; };

        [Benchmark]
        public void SimpleBenchmark() { }
    }
}";

            Console.WriteLine(code);
            var syntaxTree = CSharpSyntaxTree.ParseText(code, options: parseOptions, encoding: defaultEncoding);
            var results    = new Analyser().AnalyseBenchmark(syntaxTree, "TestFile").ToList();

            Assert.Equal(1, results.Count());
            var benchmarkInfo = results.FirstOrDefault();

            Assert.NotNull(benchmarkInfo);

            Assert.Equal(new ParamsWithStepsAttribute(1, 10, 1), benchmarkInfo.ParamsWithSteps);
            Assert.Null(benchmarkInfo.Params);
            Assert.Equal("SomeProperty", benchmarkInfo.ParamsFieldName);
        }
예제 #5
0
        public void CanAnalyseInjectedParams()
        {
            var code =
                @"using System;
using MiniBench.Core;

namespace MiniBench.Tests
{
    public class BlackholeTest
    {
        [Benchmark]
        public double SimpleBenchmark(IterationParams iteration)
        {
            return 42.0;
        }
    }
}";

            Console.WriteLine(code);
            var syntaxTree = CSharpSyntaxTree.ParseText(code, options: parseOptions, encoding: defaultEncoding);
            var results    = new Analyser().AnalyseBenchmark(syntaxTree, "TestFile").ToList();

            Assert.Equal(1, results.Count());
            var benchmarkInfo = results.FirstOrDefault();

            Assert.NotNull(benchmarkInfo);

            Assert.Equal(true, benchmarkInfo.GenerateBlackhole);
            Assert.Equal(new[] { "IterationParams" }, benchmarkInfo.ParametersToInject);
        }
예제 #6
0
        public void CanAnalyseWhenBlackholeIsNeededIdentifier()
        {
            var code =
                @"using System;
using MiniBench.Core;

namespace MiniBench.Tests
{
    public class BlackholeTest
    {
        [Benchmark]
        public DateTime SimpleBenchmark()
        {
            return new DateTime(42);
        }
    }
}";

            Console.WriteLine(code);
            var syntaxTree = CSharpSyntaxTree.ParseText(code, options: parseOptions, encoding: defaultEncoding);
            var results    = new Analyser().AnalyseBenchmark(syntaxTree, "TestFile").ToList();

            Assert.Equal(1, results.Count());
            var benchmarkInfo = results.FirstOrDefault();

            Assert.NotNull(benchmarkInfo);

            Assert.Equal(true, benchmarkInfo.GenerateBlackhole);
        }