Added basic adapters and couple of tests for v4.0.1, v5.X and v6.0.0 Unity

This commit is contained in:
Eugene Sadovoi 2017-11-17 22:05:20 -05:00
Родитель c730a218c8
Коммит afa52126aa
18 изменённых файлов: 190 добавлений и 93 удалений

1
.gitignore поставляемый
Просмотреть файл

@ -23,6 +23,7 @@ bld/
[Bb]in/
[Oo]bj/
[Ll]og/
lib/
# Visual Studio 2015 cache/options directory
.vs/

Просмотреть файл

@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net47</TargetFramework>
</PropertyGroup>
</Project>

Просмотреть файл

@ -2,8 +2,23 @@
namespace Benchmark.Abstractions
{
public abstract class UnityAdapterBase
public interface IUnityAdapter
{
public abstract void CreateContainer();
void NewUnityContainer();
void UsingUnityContainer();
}
public abstract class UnityAdapterBase<T> : IUnityAdapter where T : IDisposable
{
protected abstract T CreateContainer();
public virtual void NewUnityContainer() { T container = CreateContainer(); }
public virtual void UsingUnityContainer() { using (T container = CreateContainer()) { } }
public virtual void RegisterInstance()
{
}
}
}

Просмотреть файл

@ -3,15 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27004.2009
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Runner", "Runner\Runner.csproj", "{1614A6A2-D722-4CD0-AB17-91E582B3B5FC}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Runner", "Runner\Runner.csproj", "{1614A6A2-D722-4CD0-AB17-91E582B3B5FC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.V4.Adapter", "Unity.V4.Adapter\Unity.V4.Adapter.csproj", "{3DB49868-C3F8-4411-B60C-E25F6F00F42C}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.V4.Adapter", "Unity.V4.Adapter\Unity.V4.Adapter.csproj", "{3DB49868-C3F8-4411-B60C-E25F6F00F42C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.V5.Adapter", "Unity.V5.Adapter\Unity.V5.Adapter.csproj", "{2EBCEBCB-6611-4C61-B829-85E0359DF880}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.V5.Adapter", "Unity.V5.Adapter\Unity.V5.Adapter.csproj", "{2EBCEBCB-6611-4C61-B829-85E0359DF880}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Unity.V6.Adapter", "Unity.V6.Adapter\Unity.V6.Adapter.csproj", "{68552D99-2256-4AC6-BFD6-A40A18211819}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.V6.Adapter", "Unity.V6.Adapter\Unity.V6.Adapter.csproj", "{68552D99-2256-4AC6-BFD6-A40A18211819}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Benchmark.Abstractions", "Benchmark.Abstractions\Benchmark.Abstractions.csproj", "{78880FC1-D5BF-4A59-901D-5EBB702CCC93}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Benchmark.Abstractions", "Benchmark.Abstractions\Benchmark.Abstractions.csproj", "{78880FC1-D5BF-4A59-901D-5EBB702CCC93}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Abstractions", "Latest\Abstractions\src\Unity.Abstractions.csproj", "{076E9180-7259-4B83-BC40-F32A2D2CDBA3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Latest", "Latest", "{8FFE04F3-1771-43C5-96A8-EED028C64A73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Unity.Container", "Latest\Container\src\Unity.Container.csproj", "{8EFE66F5-D5D6-4933-8B5E-1DCF31F2BDC5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -39,10 +45,22 @@ Global
{78880FC1-D5BF-4A59-901D-5EBB702CCC93}.Debug|Any CPU.Build.0 = Debug|Any CPU
{78880FC1-D5BF-4A59-901D-5EBB702CCC93}.Release|Any CPU.ActiveCfg = Release|Any CPU
{78880FC1-D5BF-4A59-901D-5EBB702CCC93}.Release|Any CPU.Build.0 = Release|Any CPU
{076E9180-7259-4B83-BC40-F32A2D2CDBA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{076E9180-7259-4B83-BC40-F32A2D2CDBA3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{076E9180-7259-4B83-BC40-F32A2D2CDBA3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{076E9180-7259-4B83-BC40-F32A2D2CDBA3}.Release|Any CPU.Build.0 = Release|Any CPU
{8EFE66F5-D5D6-4933-8B5E-1DCF31F2BDC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8EFE66F5-D5D6-4933-8B5E-1DCF31F2BDC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8EFE66F5-D5D6-4933-8B5E-1DCF31F2BDC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8EFE66F5-D5D6-4933-8B5E-1DCF31F2BDC5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{076E9180-7259-4B83-BC40-F32A2D2CDBA3} = {8FFE04F3-1771-43C5-96A8-EED028C64A73}
{8EFE66F5-D5D6-4933-8B5E-1DCF31F2BDC5} = {8FFE04F3-1771-43C5-96A8-EED028C64A73}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {F12FC46A-FED6-408A-B7E4-EE6255667778}
EndGlobalSection

Просмотреть файл

@ -1,13 +1,16 @@
using System;
using BenchmarkDotNet.Running;
using BenchmarkDotNet.Running;
using Runner.Tests;
namespace Runner
{
class Program
public class Program
{
static void Main(string[] args)
{
var summary = BenchmarkRunner.Run<CreateContainer>();
//BenchmarkSwitcher.FromAssembly(typeof(Program).GetTypeInfo().Assembly).Run(args);
var summary = BenchmarkRunner.Run<UnityContainerBenchmarks>();
}
}
}

Просмотреть файл

@ -2,18 +2,22 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net461</TargetFramework>
<TargetFramework>net47</TargetFramework>
<OutDir>$(SolutionDir)bin\Runner</OutDir>
</PropertyGroup>
<ItemGroup>
<Compile Remove="BenchmarkDotNet.Artifacts\**" />
<EmbeddedResource Remove="BenchmarkDotNet.Artifacts\**" />
<None Remove="BenchmarkDotNet.Artifacts\**" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.10.10" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Benchmark.Abstractions\Benchmark.Abstractions.csproj" />
<ProjectReference Include="..\Unity.V4.Adapter\Unity.V4.Adapter.csproj" />
<ProjectReference Include="..\Unity.V5.Adapter\Unity.V5.Adapter.csproj" />
<ProjectReference Include="..\Unity.V6.Adapter\Unity.V6.Adapter.csproj" />
</ItemGroup>
</Project>

25
Runner/Setup/TestsBase.cs Normal file
Просмотреть файл

@ -0,0 +1,25 @@
using System;
using System.Reflection;
using Benchmark.Abstractions;
using BenchmarkDotNet.Attributes;
namespace Runner.Tests
{
public class TestsBase
{
[Params("V4", "V5", "V6")]
protected string Version;
protected IUnityAdapter Adapter;
[GlobalSetup]
public void Setup()
{
var type = Assembly.LoadFrom($"..\\Unity.{Version}.Adapter\\Unity.{Version}.Adapter.dll")
.GetType($"Unity.{Version}.Adapter.UnityTestAdapter");
Adapter = (IUnityAdapter)Activator.CreateInstance(type);
}
}
}

Просмотреть файл

@ -1,34 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Benchmark.Abstractions;
using BenchmarkDotNet.Attributes;
using Unity.V4.Adapter;
using Unity.V5.Adapter;
using Unity.V6.Adapter;
namespace Runner
{
public class CreateContainer
{
private UnityAdapterBase _adapter_v4 = new UnityV4Adapter();
private UnityAdapterBase _adapter_v5 = new UnityV5Adapter();
private UnityAdapterBase _adapter_v6 = new UnityV6Adapter();
[Benchmark]
public void CreateContainer_v4()
{
_adapter_v4
}
public void CreateContainer_v5()
{
}
public void CreateContainer_v6()
{
}
}
}

Просмотреть файл

@ -0,0 +1,51 @@
using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Order;
using BenchmarkDotNet.Reports;
namespace Runner.Tests
{
[Config(typeof(Config))]
[BenchmarkCategory("IUnityContainer")]
public class UnityContainerBenchmarks : TestsBase
{
#region Tests
[Benchmark(Description = "new UnityContainer()")]
public void NewUnityContainer() => Adapter.NewUnityContainer();
[Benchmark(Description = "using(var uc = new UnityContainer()){}")]
public void UsingUnityContainer() => Adapter.UsingUnityContainer();
#endregion
#region Config
private class Config : ManualConfig
{
public Config()
{
Set(new NameVersionOrderProvider());
}
private class NameVersionOrderProvider : IOrderProvider
{
public IEnumerable<BenchmarkDotNet.Running.Benchmark> GetExecutionOrder(BenchmarkDotNet.Running.Benchmark[] benchmarks) =>
from benchmark in benchmarks
orderby benchmark.Parameters["Version"] descending,
benchmark.Target.MethodDisplayInfo
select benchmark;
public IEnumerable<BenchmarkDotNet.Running.Benchmark> GetSummaryOrder(BenchmarkDotNet.Running.Benchmark[] benchmarks, Summary summary) =>
benchmarks.OrderBy(benchmark => benchmark.DisplayInfo).ThenBy(benchmark => benchmark.Parameters["Version"]);//.ThenBy(benchmark => summary[benchmark].ResultStatistics.Mean);
public string GetGroupKey(BenchmarkDotNet.Running.Benchmark benchmark, Summary summary) => null;
}
}
#endregion
}
}

Просмотреть файл

@ -1,10 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<TargetFramework>net47</TargetFramework>
<OutDir>$(SolutionDir)bin\Unity.V4.Adapter</OutDir>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.10.10" />
<PackageReference Include="Unity" Version="4.0.1" />
</ItemGroup>

Просмотреть файл

@ -0,0 +1,15 @@
using System;
using Benchmark.Abstractions;
using Microsoft.Practices.Unity;
namespace Unity.V4.Adapter
{
public class UnityTestAdapter : UnityAdapterBase<UnityContainer>
{
protected override UnityContainer CreateContainer()
{
return new UnityContainer();
}
}
}

Просмотреть файл

@ -1,14 +0,0 @@
using System;
using Benchmark.Abstractions;
using Microsoft.Practices.Unity;
namespace Unity.V4.Adapter
{
public class UnityV4Adapter : UnityAdapterBase
{
public override void CreateContainer()
{
var container = new UnityContainer();
}
}
}

Просмотреть файл

@ -1,10 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net47</TargetFramework>
<OutDir>$(SolutionDir)bin\Unity.V5.Adapter</OutDir>
<RootNamespace>Unity.V5.Adapter</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.10.10" />
<PackageReference Include="Unity" Version="5.*" />
</ItemGroup>

Просмотреть файл

@ -0,0 +1,14 @@
using System;
using Benchmark.Abstractions;
namespace Unity.V5.Adapter
{
public class UnityTestAdapter : UnityAdapterBase<UnityContainer>
{
protected override UnityContainer CreateContainer()
{
return new UnityContainer();
}
}
}

Просмотреть файл

@ -1,13 +0,0 @@
using System;
using Benchmark.Abstractions;
namespace Unity.V5.Adapter
{
public class UnityV5Adapter : UnityAdapterBase
{
public override void CreateContainer()
{
var container = new UnityContainer();
}
}
}

Просмотреть файл

@ -1,11 +1,19 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<TargetFramework>net47</TargetFramework>
<OutDir>$(SolutionDir)bin\Unity.V6.Adapter</OutDir>
<RootNamespace>Unity.V6.Adapter</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.10.10" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Benchmark.Abstractions\Benchmark.Abstractions.csproj" />
<ProjectReference Include="..\Latest\Abstractions\src\Unity.Abstractions.csproj" />
<ProjectReference Include="..\Latest\Container\src\Unity.Container.csproj" />
</ItemGroup>
</Project>

Просмотреть файл

@ -0,0 +1,12 @@
using Benchmark.Abstractions;
namespace Unity.V6.Adapter
{
public class UnityTestAdapter : UnityAdapterBase<UnityContainer>
{
protected override UnityContainer CreateContainer()
{
return new UnityContainer();
}
}
}

Просмотреть файл

@ -1,13 +0,0 @@
using System;
using Benchmark.Abstractions;
namespace Unity.V6.Adapter
{
public class UnityV6Adapter : UnityAdapterBase
{
public override void CreateContainer()
{
var container = new UnityContainer();
}
}
}