diff --git a/AgileMapper.PerformanceTester/AgileMapper.PerformanceTester.csproj b/AgileMapper.PerformanceTester.Net45/AgileMapper.PerformanceTester.Net45.csproj similarity index 53% rename from AgileMapper.PerformanceTester/AgileMapper.PerformanceTester.csproj rename to AgileMapper.PerformanceTester.Net45/AgileMapper.PerformanceTester.Net45.csproj index af7fce220..d246c8dcd 100644 --- a/AgileMapper.PerformanceTester/AgileMapper.PerformanceTester.csproj +++ b/AgileMapper.PerformanceTester.Net45/AgileMapper.PerformanceTester.Net45.csproj @@ -8,8 +8,8 @@ {2B8A4535-7E5C-4DB6-BB86-06AEB4F3DE81} Exe Properties - AgileObjects.AgileMapper.PerformanceTester - AgileObjects.AgileMapper.PerformanceTester + AgileObjects.AgileMapper.PerformanceTester.Net45 + AgileObjects.AgileMapper.PerformanceTester.Net45 v4.5.2 512 true @@ -75,76 +75,15 @@ VersionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - @@ -153,9 +92,9 @@ - - {69c1f1a9-f8a4-4cee-90e3-67b8d6dae8f6} - AgileMapper.UnitTests.Common + + {f377844c-1a00-4685-8c04-07e6067c2812} + AgileMapper.PerformanceTesting {46d95c53-b4cb-4ee7-9573-5d3ef96099c0} diff --git a/AgileMapper.PerformanceTester/App.config b/AgileMapper.PerformanceTester.Net45/App.config similarity index 100% rename from AgileMapper.PerformanceTester/App.config rename to AgileMapper.PerformanceTester.Net45/App.config diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapper.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapper.cs similarity index 77% rename from AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapper.cs rename to AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapper.cs index dc99a8fab..fe5f7a129 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapper.cs +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapper.cs @@ -1,13 +1,13 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper { using System.Collections.Generic; using System.Linq; - using AbstractMappers; using global::ExpressMapper; using global::ExpressMapper.Extensions; - using static TestClasses.Complex; + using PerformanceTesting.AbstractMappers; + using static PerformanceTesting.TestClasses.Complex; - internal class ExpressMapperComplexTypeMapper : ComplexTypeMapperBase + public class ExpressMapperComplexTypeMapper : ComplexTypeMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapperSetup.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapperSetup.cs similarity index 64% rename from AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapperSetup.cs rename to AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapperSetup.cs index 267e0c779..bf49bc623 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapperSetup.cs +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperComplexTypeMapperSetup.cs @@ -1,24 +1,19 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper { using System.Collections.Generic; using System.Linq; - using AbstractMappers; using global::ExpressMapper; using global::ExpressMapper.Extensions; - using static TestClasses.Complex; + using PerformanceTesting.AbstractMappers; + using static PerformanceTesting.TestClasses.Complex; - internal class ExpressMapperComplexTypeMapperSetup : ComplexTypeMapperSetupBase + public class ExpressMapperComplexTypeMapperSetup : ComplexTypeMapperSetupBase { public override void Initialise() { } - protected override void Reset() - { - Mapper.Reset(); - } - - protected override void SetupComplexTypeMapper() + protected override Foo SetupComplexTypeMapper(Foo sourceFoo) { Mapper .Register() @@ -29,7 +24,9 @@ protected override void SetupComplexTypeMapper() Mapper.Compile(); - Mapper.Map(new Foo()); + return Mapper.Map(sourceFoo); } + + protected override void Reset() => Mapper.Reset(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperCtorMapper.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperCtorMapper.cs similarity index 53% rename from AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperCtorMapper.cs rename to AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperCtorMapper.cs index fd90b1d5b..25e93748d 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperCtorMapper.cs +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperCtorMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper { - using AbstractMappers; using global::ExpressMapper; - using static TestClasses.Ctor; + using PerformanceTesting.AbstractMappers; + using static PerformanceTesting.TestClasses.Ctor; - internal class ExpressMapperCtorMapper : CtorMapperBase + public class ExpressMapperCtorMapper : CtorMapperBase { public override void Initialise() { @@ -16,8 +16,6 @@ public override void Initialise() } protected override ConstructedObject Construct(ValueObject valueObject) - { - return Mapper.Map(valueObject); - } + => Mapper.Map(valueObject); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapper.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapper.cs similarity index 75% rename from AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapper.cs rename to AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapper.cs index 30c57883a..4b80bddd5 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapper.cs +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapper.cs @@ -1,12 +1,12 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper { using System.Collections.Generic; - using AbstractMappers; using global::ExpressMapper; using global::ExpressMapper.Extensions; - using static TestClasses.Deep; + using PerformanceTesting.AbstractMappers; + using static PerformanceTesting.TestClasses.Deep; - internal class ExpressMapperDeepMapper : DeepMapperBase + public class ExpressMapperDeepMapper : DeepMapperBase { public override void Initialise() { @@ -28,8 +28,6 @@ public override void Initialise() } protected override CustomerDto Map(Customer customer) - { - return Mapper.Map(customer); - } + => Mapper.Map(customer); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapperSetup.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapperSetup.cs similarity index 66% rename from AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapperSetup.cs rename to AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapperSetup.cs index fe42b4ad5..138b2317c 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapperSetup.cs +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperDeepMapperSetup.cs @@ -1,23 +1,18 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper { using System.Collections.Generic; - using AbstractMappers; using global::ExpressMapper; using global::ExpressMapper.Extensions; - using static TestClasses.Deep; + using PerformanceTesting.AbstractMappers; + using static PerformanceTesting.TestClasses.Deep; - internal class ExpressMapperDeepMapperSetup : DeepMapperSetupBase + public class ExpressMapperDeepMapperSetup : DeepMapperSetupBase { public override void Initialise() { } - protected override void Reset() - { - Mapper.Reset(); - } - - protected override void SetupDeepMapper() + protected override CustomerDto SetupDeepMapper(Customer customer) { Mapper .Register() @@ -35,7 +30,9 @@ protected override void SetupDeepMapper() Mapper.Compile(); - Mapper.Map(new Customer()); + return Mapper.Map(customer); } + + protected override void Reset() => Mapper.Reset(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperFlatteningMapper.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperFlatteningMapper.cs similarity index 66% rename from AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperFlatteningMapper.cs rename to AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperFlatteningMapper.cs index a3f7dc323..c8650f116 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperFlatteningMapper.cs +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperFlatteningMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper { - using AbstractMappers; using global::ExpressMapper; - using static TestClasses.Flattening; + using PerformanceTesting.AbstractMappers; + using static PerformanceTesting.TestClasses.Flattening; - internal class ExpressMapperFlatteningMapper : FlatteningMapperBase + public class ExpressMapperFlatteningMapper : FlatteningMapperBase { public override void Initialise() { @@ -19,8 +19,6 @@ public override void Initialise() } protected override ModelDto Flatten(ModelObject model) - { - return Mapper.Map(model); - } + => Mapper.Map(model); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperInstantiation.cs b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperInstantiation.cs new file mode 100644 index 000000000..3cfd3f90d --- /dev/null +++ b/AgileMapper.PerformanceTester.Net45/ConcreteMappers/ExpressMapper/ExpressMapperInstantiation.cs @@ -0,0 +1,10 @@ +namespace AgileObjects.AgileMapper.PerformanceTester.Net45.ConcreteMappers.ExpressMapper +{ + using global::ExpressMapper; + using PerformanceTesting.AbstractMappers; + + public class ExpressMapperInstantiation : MapperInstantiationBase + { + protected override object CreateMapperInstance() => new MappingServiceProvider(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester.Net45/Program.cs b/AgileMapper.PerformanceTester.Net45/Program.cs new file mode 100644 index 000000000..105f2cccc --- /dev/null +++ b/AgileMapper.PerformanceTester.Net45/Program.cs @@ -0,0 +1,26 @@ +// AgileMapper and AutoMapper perform better with this attribute applied, +// but ExpressMapper and Mapster throw exceptions - uncomment to test the +// Agile and Auto at their fastest: +//[assembly: System.Security.AllowPartiallyTrustedCallers] + +namespace AgileObjects.AgileMapper.PerformanceTester.Net45 +{ + using ConcreteMappers.ExpressMapper; + using PerformanceTesting; + + // Specify comma-separated sets of mapper Ids and (optionally) test Ids from the string arrays + // below if desired. e.g: + // - Run the deep and complex tests for AgileMapper: + // ag deep,compl + // - Run the constructor and flattening mapping tests for the manual and ExpressMapper mappers: + // man,exp ctor,flat + public class Program + { + public static void Main(string[] args) + { + new PerformanceTestRunner() + .AddMapper("exp", typeof(ExpressMapperCtorMapper)) + .Run(args); + } + } +} diff --git a/AgileMapper.PerformanceTester/Properties/AssemblyInfo.cs b/AgileMapper.PerformanceTester.Net45/Properties/AssemblyInfo.cs similarity index 100% rename from AgileMapper.PerformanceTester/Properties/AssemblyInfo.cs rename to AgileMapper.PerformanceTester.Net45/Properties/AssemblyInfo.cs diff --git a/AgileMapper.PerformanceTester/Results/2016-10-10.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-10-10.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-10-10.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-10-10.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-10-15 @ 66f3123.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-10-15 @ 66f3123.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-10-15 @ 66f3123.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-10-15 @ 66f3123.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-10-16 @ e356d85.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-10-16 @ e356d85.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-10-16 @ e356d85.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-10-16 @ e356d85.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-10-17 @ 7875870.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-10-17 @ 7875870.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-10-17 @ 7875870.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-10-17 @ 7875870.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-03 @ 61bf34c.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-03 @ 61bf34c.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-03 @ 61bf34c.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-03 @ 61bf34c.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-04 @ 3b84f95.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-04 @ 3b84f95.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-04 @ 3b84f95.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-04 @ 3b84f95.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-04 @ c71ba19.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-04 @ c71ba19.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-04 @ c71ba19.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-04 @ c71ba19.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-08 @ 57f1b16.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-08 @ 57f1b16.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-08 @ 57f1b16.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-08 @ 57f1b16.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-08 @ af9e41a.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-08 @ af9e41a.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-08 @ af9e41a.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-08 @ af9e41a.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-12 @ 7acdd5c.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-12 @ 7acdd5c.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-12 @ 7acdd5c.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-12 @ 7acdd5c.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-12 @ 9670998.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-12 @ 9670998.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-12 @ 9670998.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-12 @ 9670998.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-14 @ 1cc2239.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-14 @ 1cc2239.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-14 @ 1cc2239.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-14 @ 1cc2239.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-17 @ ad1ff4d.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-17 @ ad1ff4d.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-17 @ ad1ff4d.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-17 @ ad1ff4d.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-19 @ aebda06.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-19 @ aebda06.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-19 @ aebda06.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-19 @ aebda06.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-20 @ 697b7e3.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-20 @ 697b7e3.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-20 @ 697b7e3.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-20 @ 697b7e3.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-29 @ 9c4b0b3.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-29 @ 9c4b0b3.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-29 @ 9c4b0b3.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-29 @ 9c4b0b3.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-11-29 @ a3c3780.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-11-29 @ a3c3780.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-11-29 @ a3c3780.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-11-29 @ a3c3780.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-12-02 @ 0ccf054.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-12-02 @ 0ccf054.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-12-02 @ 0ccf054.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-12-02 @ 0ccf054.txt diff --git a/AgileMapper.PerformanceTester/Results/2016-12-23 @ f7c42f6.txt b/AgileMapper.PerformanceTester.Net45/Results/2016-12-23 @ f7c42f6.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2016-12-23 @ f7c42f6.txt rename to AgileMapper.PerformanceTester.Net45/Results/2016-12-23 @ f7c42f6.txt diff --git a/AgileMapper.PerformanceTester/Results/2018-02-16 @ d78a210.txt b/AgileMapper.PerformanceTester.Net45/Results/2018-02-16 @ d78a210.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2018-02-16 @ d78a210.txt rename to AgileMapper.PerformanceTester.Net45/Results/2018-02-16 @ d78a210.txt diff --git a/AgileMapper.PerformanceTester/Results/2018-02-17 @ 09dc6afd.txt b/AgileMapper.PerformanceTester.Net45/Results/2018-02-17 @ 09dc6afd.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2018-02-17 @ 09dc6afd.txt rename to AgileMapper.PerformanceTester.Net45/Results/2018-02-17 @ 09dc6afd.txt diff --git a/AgileMapper.PerformanceTester/Results/2018-02-19 @ db622efb.txt b/AgileMapper.PerformanceTester.Net45/Results/2018-02-19 @ db622efb.txt similarity index 100% rename from AgileMapper.PerformanceTester/Results/2018-02-19 @ db622efb.txt rename to AgileMapper.PerformanceTester.Net45/Results/2018-02-19 @ db622efb.txt diff --git a/AgileMapper.PerformanceTester/packages.config b/AgileMapper.PerformanceTester.Net45/packages.config similarity index 100% rename from AgileMapper.PerformanceTester/packages.config rename to AgileMapper.PerformanceTester.Net45/packages.config diff --git a/AgileMapper.PerformanceTester.NetCore21/AgileMapper.PerformanceTester.NetCore21.csproj b/AgileMapper.PerformanceTester.NetCore21/AgileMapper.PerformanceTester.NetCore21.csproj new file mode 100644 index 000000000..33674ed9e --- /dev/null +++ b/AgileMapper.PerformanceTester.NetCore21/AgileMapper.PerformanceTester.NetCore21.csproj @@ -0,0 +1,23 @@ + + + + + Exe + netcoreapp2.1 + AgileObjects.AgileMapper.PerformanceTester.NetCore21 + AgileObjects.AgileMapper.PerformanceTester.NetCore21 + + + + + + + + + + + + + + + diff --git a/AgileMapper.PerformanceTester.NetCore21/ConcreteMappers/Mapster/MapsterEntityMapperSetup.cs b/AgileMapper.PerformanceTester.NetCore21/ConcreteMappers/Mapster/MapsterEntityMapperSetup.cs new file mode 100644 index 000000000..8e4299466 --- /dev/null +++ b/AgileMapper.PerformanceTester.NetCore21/ConcreteMappers/Mapster/MapsterEntityMapperSetup.cs @@ -0,0 +1,27 @@ +namespace AgileObjects.AgileMapper.PerformanceTester.NetCore21.ConcreteMappers.Mapster +{ + // warehouse.Adapt(); throws a StackOverflowException + + //using global::Mapster; + //using PerformanceTesting.AbstractMappers; + //using static PerformanceTesting.TestClasses.Entities; + + //public class MapsterEntityMapperSetup : EntityMapperSetupBase + //{ + // public override void Initialise() + // { + // } + + // protected override Warehouse SetupEntityMapper(Warehouse warehouse) + // { + // TypeAdapterConfig.NewConfig() + // // .Map(dest => dest.Foos, src => src.Foos ?? new List()) + // .Compile(); + + // return warehouse.Adapt(); + // } + + // protected override void Reset() + // => TypeAdapterConfig.Clear(); + //} +} diff --git a/AgileMapper.PerformanceTester.NetCore21/Program.cs b/AgileMapper.PerformanceTester.NetCore21/Program.cs new file mode 100644 index 000000000..79f8133b4 --- /dev/null +++ b/AgileMapper.PerformanceTester.NetCore21/Program.cs @@ -0,0 +1,14 @@ +namespace AgileObjects.AgileMapper.PerformanceTester.NetCore21 +{ + using PerformanceTesting; + + public class Program + { + public static void Main(string[] args) + { + new PerformanceTestRunner() + //.AddTest(MapperIds.Mapster, typeof(MapsterEntityMapperSetup)) + .Run(args); + } + } +} diff --git a/AgileMapper.PerformanceTester.NetCore21/Properties/launchSettings.json b/AgileMapper.PerformanceTester.NetCore21/Properties/launchSettings.json new file mode 100644 index 000000000..728c7483f --- /dev/null +++ b/AgileMapper.PerformanceTester.NetCore21/Properties/launchSettings.json @@ -0,0 +1,8 @@ +{ + "profiles": { + "AgileMapper.PerformanceTester.NetCore21": { + "commandName": "Project", + "commandLineArgs": "ma ents" + } + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/AbstractMappers/ComplexTypeMapperSetupBase.cs b/AgileMapper.PerformanceTester/AbstractMappers/ComplexTypeMapperSetupBase.cs deleted file mode 100644 index a079f4445..000000000 --- a/AgileMapper.PerformanceTester/AbstractMappers/ComplexTypeMapperSetupBase.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers -{ - internal abstract class ComplexTypeMapperSetupBase : MapperSetupTestBase - { - protected override void Execute() => SetupComplexTypeMapper(); - - protected abstract void SetupComplexTypeMapper(); - } -} diff --git a/AgileMapper.PerformanceTester/AbstractMappers/DeepMapperSetupBase.cs b/AgileMapper.PerformanceTester/AbstractMappers/DeepMapperSetupBase.cs deleted file mode 100644 index f19ded26f..000000000 --- a/AgileMapper.PerformanceTester/AbstractMappers/DeepMapperSetupBase.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers -{ - internal abstract class DeepMapperSetupBase : MapperSetupTestBase - { - protected override void Execute() => SetupDeepMapper(); - - protected abstract void SetupDeepMapper(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/AbstractMappers/EntityMapperSetupBase.cs b/AgileMapper.PerformanceTester/AbstractMappers/EntityMapperSetupBase.cs deleted file mode 100644 index 53e9122ac..000000000 --- a/AgileMapper.PerformanceTester/AbstractMappers/EntityMapperSetupBase.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers -{ - internal abstract class EntityMapperSetupBase : MapperSetupTestBase - { - protected override void Execute() => SetupEntityMapper(); - - protected abstract void SetupEntityMapper(); - } -} diff --git a/AgileMapper.PerformanceTester/AbstractMappers/MapperSetupTestBase.cs b/AgileMapper.PerformanceTester/AbstractMappers/MapperSetupTestBase.cs deleted file mode 100644 index 17b309988..000000000 --- a/AgileMapper.PerformanceTester/AbstractMappers/MapperSetupTestBase.cs +++ /dev/null @@ -1,52 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers -{ - using System; - using System.Diagnostics; - - internal abstract class MapperSetupTestBase : IObjectMapperTest - { - private readonly IObjectMapperTest _mapperTest; - - protected MapperSetupTestBase() - { - var type = GetType(); - var mapperTestName = $"{type.Namespace}.{type.Name.Replace("Setup", null)}"; - var mapperTestType = Type.GetType(mapperTestName) ?? throw new InvalidOperationException(); - - _mapperTest = (IObjectMapperTest)Activator.CreateInstance(mapperTestType); - - _mapperTest.Initialise(); - } - - public string Name => GetType().Name; - - public int NumberOfExecutions => 100; - - public abstract void Initialise(); - - public object Execute(Stopwatch timer) - { - timer.Stop(); - - Reset(); - - timer.Start(); - - Execute(); - - var mapped = _mapperTest.Execute(new Stopwatch()); - - _mapperTest.Verify(mapped); - - return null; - } - - protected abstract void Execute(); - - public void Verify(object result) - { - } - - protected abstract void Reset(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/AbstractMappers/UnflatteningMapperSetupBase.cs b/AgileMapper.PerformanceTester/AbstractMappers/UnflatteningMapperSetupBase.cs deleted file mode 100644 index 82963e3fa..000000000 --- a/AgileMapper.PerformanceTester/AbstractMappers/UnflatteningMapperSetupBase.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers -{ - internal abstract class UnflatteningMapperSetupBase : MapperSetupTestBase - { - protected override void Execute() => SetupUnflatteningMapper(); - - protected abstract void SetupUnflatteningMapper(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapperSetup.cs deleted file mode 100644 index 407639ec6..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapperSetup.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper -{ - using AbstractMappers; - using static TestClasses.Complex; - - internal class AgileMapperComplexTypeMapperSetup : ComplexTypeMapperSetupBase - { - private IMapper _mapper; - - public override void Initialise() => _mapper = Mapper.CreateNew(); - - protected override void SetupComplexTypeMapper() - => _mapper.GetPlanFor().ToANew(); - - protected override void Reset() - { - _mapper.Dispose(); - _mapper.WhenMapping.DisableObjectTracking(); - } - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperDeepMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperDeepMapperSetup.cs deleted file mode 100644 index 05621caba..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperDeepMapperSetup.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper -{ - using AbstractMappers; - using static TestClasses.Deep; - - internal class AgileMapperDeepMapperSetup : DeepMapperSetupBase - { - private IMapper _mapper; - - public override void Initialise() => _mapper = Mapper.CreateNew(); - - protected override void Reset() => _mapper.Dispose(); - - protected override void SetupDeepMapper() - => _mapper.GetPlanFor().ToANew(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperEntityMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperEntityMapperSetup.cs deleted file mode 100644 index 34ae8f04e..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperEntityMapperSetup.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper -{ - using AbstractMappers; - using static TestClasses.Entities; - - internal class AgileMapperEntityMapperSetup : EntityMapperSetupBase - { - private IMapper _mapper; - - public override void Initialise() => _mapper = Mapper.CreateNew(); - - protected override void SetupEntityMapper() - => _mapper.GetPlanFor().ToANew(); - - protected override void Reset() => _mapper.Dispose(); - } -} diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperInstantiation.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperInstantiation.cs deleted file mode 100644 index 6ab334895..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperInstantiation.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper -{ - using AbstractMappers; - - internal class AgileMapperInstantiation : MapperInstantiationBase - { - protected override object CreateMapperInstance() => Mapper.CreateNew(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapper.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapper.cs deleted file mode 100644 index be7c09d09..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapper.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper -{ - using AbstractMappers; - using static TestClasses.Flattening; - - internal class AgileMapperUnflatteningMapper : UnflatteningMapperBase - { - private IMapper _mapper; - - public override void Initialise() - { - _mapper = Mapper.CreateNew(); - } - - protected override ModelObject Unflatten(ModelDto dto) - { - return _mapper.Map(dto).ToANew(); - } - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapperSetup.cs deleted file mode 100644 index 4272f79f6..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapperSetup.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper -{ - using AbstractMappers; - using static TestClasses.Flattening; - - internal class AgileMapperUnflatteningMapperSetup : UnflatteningMapperSetupBase - { - private IMapper _mapper; - - public override void Initialise() => _mapper = Mapper.CreateNew(); - - protected override void Reset() => _mapper.Dispose(); - - protected override void SetupUnflatteningMapper() - => _mapper.GetPlanFor().ToANew(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapperSetup.cs deleted file mode 100644 index ae12363b6..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapperSetup.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper -{ - using AbstractMappers; - using global::AutoMapper; - using static TestClasses.Complex; - - internal class AutoMapperComplexTypeMapperSetup : ComplexTypeMapperSetupBase - { - public override void Initialise() - { - } - - protected override void Reset() - { - Mapper.Reset(); - } - - protected override void SetupComplexTypeMapper() - { - Mapper.Initialize(cfg => cfg.CreateMap()); - - Mapper.Map(new Foo()); - } - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperEntityMapper.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperEntityMapper.cs deleted file mode 100644 index ac7edaf6c..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperEntityMapper.cs +++ /dev/null @@ -1,38 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper -{ - using AbstractMappers; - using global::AutoMapper; - using static TestClasses.Entities; - - internal class AutoMapperEntityMapper : EntityMapperBase - { - private IMapper _mapper; - - public override void Initialise() - { - var config = new MapperConfiguration(cfg => - { - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - }); - - _mapper = config.CreateMapper(); - } - - protected override Warehouse Clone(Warehouse warehouse) - => _mapper.Map(warehouse); - } -} diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperEntityMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperEntityMapperSetup.cs deleted file mode 100644 index 8caadc2cb..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperEntityMapperSetup.cs +++ /dev/null @@ -1,39 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper -{ - using AbstractMappers; - using global::AutoMapper; - using static TestClasses.Entities; - - internal class AutoMapperEntityMapperSetup : EntityMapperSetupBase - { - public override void Initialise() - { - } - - protected override void SetupEntityMapper() - { - Mapper.Initialize(cfg => - { - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - cfg.CreateMap(); - }); - - Mapper.Map(new Warehouse()); - } - - protected override void Reset() => Mapper.Reset(); - } -} diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapperSetup.cs deleted file mode 100644 index 289f3852d..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapperSetup.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper -{ - using AbstractMappers; - using global::AutoMapper; - using static TestClasses.Flattening; - - internal class AutoMapperUnflatteningMapperSetup : UnflatteningMapperSetupBase - { - public override void Initialise() - { - } - - protected override void Reset() - { - Mapper.Reset(); - } - - protected override void SetupUnflatteningMapper() - { - Mapper.Initialize(cfg => cfg.CreateMap().ReverseMap()); - - Mapper.Map(new ModelDto()); - } - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperInstantiation.cs b/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperInstantiation.cs deleted file mode 100644 index b0f02bd04..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ExpressMapper/ExpressMapperInstantiation.cs +++ /dev/null @@ -1,10 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ExpressMapper -{ - using AbstractMappers; - using global::ExpressMapper; - - internal class ExpressMapperInstantiation : MapperInstantiationBase - { - protected override object CreateMapperInstance() => new MappingServiceProvider(); - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterEntityMapperSetup.cs b/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterEntityMapperSetup.cs deleted file mode 100644 index 49ee22d43..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterEntityMapperSetup.cs +++ /dev/null @@ -1,25 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster -{ - using AbstractMappers; - using global::Mapster; - using static TestClasses.Entities; - - internal class MapsterEntityMapperSetup : EntityMapperSetupBase - { - public override void Initialise() - { - } - - protected override void SetupEntityMapper() - { - TypeAdapterConfig.NewConfig() - // .Map(dest => dest.Foos, src => src.Foos ?? new List()) - .Compile(); - - new Warehouse().Adapt(); - } - - protected override void Reset() - => TypeAdapterConfig.Clear(); - } -} diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterCtorMapper.cs b/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterCtorMapper.cs deleted file mode 100644 index 01d619651..000000000 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterCtorMapper.cs +++ /dev/null @@ -1,19 +0,0 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ValueInjecter -{ - using AbstractMappers; - using Omu.ValueInjecter; - using static TestClasses.Ctor; - - internal class ValueInjecterCtorMapper : CtorMapperBase - { - public override void Initialise() - { - Mapper.AddMap(src => new ConstructedObject(src.Value)); - } - - protected override ConstructedObject Construct(ValueObject valueObject) - { - return Mapper.Map(valueObject); - } - } -} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/Program.cs b/AgileMapper.PerformanceTester/Program.cs deleted file mode 100644 index 9a53e6a84..000000000 --- a/AgileMapper.PerformanceTester/Program.cs +++ /dev/null @@ -1,217 +0,0 @@ -// Largely based on the AutoMapper benchmark project: -// Project: https://github.com/AutoMapper/AutoMapper/tree/master/src/Benchmark -// Licence: https://github.com/AutoMapper/AutoMapper/blob/master/LICENSE.txt - -// AgileMapper and AutoMapper perform better with this attribute applied, -// but ExpressMapper and Mapster throw exceptions - uncomment to test the -// Agile and Auto at their fastest: -//[assembly: System.Security.AllowPartiallyTrustedCallers] - -namespace AgileObjects.AgileMapper.PerformanceTester -{ - using System; - using System.Collections.Generic; - using System.Linq; - using AbstractMappers; - using ConcreteMappers.AgileMapper; - using ConcreteMappers.AutoMapper; - using ConcreteMappers.ExpressMapper; - using ConcreteMappers.Manual; - using ConcreteMappers.Mapster; - using ConcreteMappers.ValueInjecter; - - // Specify comma-separated sets of mapper Ids and (optionally) test Ids from the string arrays - // below if desired. e.g: - // - Run the deep and complex tests for AgileMapper: - // ag deep,compl - // - Run the constructor and flattening mapping tests for the manual and ExpressMapper mappers: - // man,exp ctor,flat - public class Program - { - private static readonly string[] _mapperIds = { "man", "ag", "au", "exp", "ma", "vi" }; - private static readonly string[] _testIds = { "ctor", "compl", "compls", "flat", "unflat", "unflats", "deep", "deeps", "ent", "ents", "new" }; - - public static void Main(string[] args) - { - Console.WriteLine("Starting..."); - - if (!TryGetMappersToTest(args, out var mappersToTest)) - { - Console.WriteLine( - "Invalid mapper(s) specified: {0}{1}Available mapper ids: {2}", - string.Join(", ", mappersToTest), - Environment.NewLine, - string.Join(", ", _mapperIds)); - } - - if (!TryGetTestsToRun(args, out var testsToRun)) - { - Console.WriteLine( - "Invalid test(s) specified: {0}{1}Available tests: {2}", - string.Join(", ", testsToRun), - Environment.NewLine, - string.Join(", ", _testIds)); - } - - var useManual = mappersToTest.Contains("man"); - var useAgileMapper = mappersToTest.Contains("ag"); - var useAutoMapper = mappersToTest.Contains("au"); - var useExpressMapper = mappersToTest.Contains("exp"); - var useMapster = mappersToTest.Contains("ma"); - var useValueInjecter = mappersToTest.Contains("vi"); - - var mapperTestSets = new[] - { - new IObjectMapperTest[] - { - useManual ? new ManualCtorMapper() : null, - useAgileMapper ? new AgileMapperCtorMapper() : null, - useAutoMapper ? new AutoMapperCtorMapper() : null, - useExpressMapper ? new ExpressMapperCtorMapper() : null, - useMapster ? new MapsterCtorMapper() : null, - useValueInjecter ? new ValueInjecterCtorMapper() : null - }, - new IObjectMapperTest[] - { - useManual ? new ManualComplexTypeMapper() : null, - useAgileMapper ? new AgileMapperComplexTypeMapper() : null, - useAutoMapper ? new AutoMapperComplexTypeMapper() : null, - useExpressMapper ? new ExpressMapperComplexTypeMapper() : null, - useMapster ? new MapsterComplexTypeMapper() : null, - useValueInjecter ? new ValueInjecterComplexTypeMapper() : null - }, - new IObjectMapperTest[] - { - useAgileMapper ? new AgileMapperComplexTypeMapperSetup() : null, - useAutoMapper ? new AutoMapperComplexTypeMapperSetup() : null, - useExpressMapper ? new ExpressMapperComplexTypeMapperSetup() : null, - useMapster ? new MapsterComplexTypeMapperSetup() : null - }, - new IObjectMapperTest[] - { - useManual ? new ManualFlatteningMapper() : null, - useAgileMapper ? new AgileMapperFlatteningMapper() : null, - useAutoMapper ? new AutoMapperFlatteningMapper() : null, - useExpressMapper ? new ExpressMapperFlatteningMapper() : null, - useMapster ? new MapsterFlatteningMapper() : null, - useValueInjecter ? new ValueInjecterFlatteningMapper() : null - }, - new IObjectMapperTest[] - { - useManual ? new ManualUnflatteningMapper() : null, - useAgileMapper ? new AgileMapperUnflatteningMapper() : null, - useAutoMapper ? new AutoMapperUnflatteningMapper(): null, - //new ExpressMapperUnflatteningMapper(), // Not supported, NullReferenceException - //new MapsterUnflatteningMapper(), // Not supported, complex type members unpopulated - useValueInjecter ? new ValueInjecterUnflatteningMapper() : null - }, - new IObjectMapperTest[] - { - useAgileMapper ? new AgileMapperUnflatteningMapperSetup() : null, - useAutoMapper ? new AutoMapperUnflatteningMapperSetup() : null - }, - new IObjectMapperTest[] - { - useManual ? new ManualDeepMapper() : null, - useAgileMapper ? new AgileMapperDeepMapper() : null, - useAutoMapper ? new AutoMapperDeepMapper() : null, - useExpressMapper ? new ExpressMapperDeepMapper() : null, - useMapster ? new MapsterDeepMapper() : null, - useValueInjecter ? new ValueInjecterDeepMapper() : null - }, - new IObjectMapperTest[] - { - useAgileMapper ? new AgileMapperDeepMapperSetup() : null, - useAutoMapper ? new AutoMapperDeepMapperSetup() : null, - useExpressMapper ? new ExpressMapperDeepMapperSetup() : null, - useMapster ? new MapsterDeepMapperSetup() : null - }, - new IObjectMapperTest[] - { - useAgileMapper ? new AgileMapperEntityMapper() : null, - //useAutoMapper ? new AutoMapperEntityMapper() : null, // Not supported, StackOverflow exception - //useMapster ? new MapsterEntityMapper() : null, // Not supported, StackOverflow exception - }, - new IObjectMapperTest[] - { - useAgileMapper ? new AgileMapperEntityMapperSetup() : null, - useAutoMapper ? new AutoMapperEntityMapperSetup() : null, - useMapster ? new MapsterEntityMapperSetup() : null - }, - new IObjectMapperTest[] - { - useAgileMapper ? new AgileMapperInstantiation() : null, - useAutoMapper ? new AutoMapperInstantiation() : null, - useExpressMapper ? new ExpressMapperInstantiation() : null, - useMapster ? new MapsterMapperInstantiation() : null - } - }; - - for (var i = 0; i < mapperTestSets.Length; i++) - { - if (!testsToRun.Contains(_testIds[i])) - { - continue; - } - - var relevantMapperTests = (mappersToTest == _mapperIds) - ? mapperTestSets[i] - : mapperTestSets[i].Where(mapper => mapper != null).ToArray(); - - MapperTester.Test(relevantMapperTests); - Console.WriteLine(); - } - - Console.WriteLine("Done!"); - Console.ReadLine(); - } - - private static bool TryGetMappersToTest(IList args, out string[] mappersToTest) - { - if (args.Count == 0) - { - mappersToTest = _mapperIds; - return true; - } - - if (args[0] == "*") - { - mappersToTest = _mapperIds; - return true; - } - - var mapperIds = args[0].ToLowerInvariant().Split(','); - var invalidMapperIds = mapperIds.Except(_mapperIds).ToArray(); - - if (invalidMapperIds.Any()) - { - mappersToTest = invalidMapperIds; - return false; - } - - mappersToTest = _mapperIds.Intersect(mapperIds).ToArray(); - return true; - } - - private static bool TryGetTestsToRun(IList args, out string[] testsToRun) - { - if (args.Count < 2) - { - testsToRun = _testIds; - return true; - } - - var testIds = args[1].ToLowerInvariant().Split(','); - var invalidTestIds = testIds.Except(_testIds).ToArray(); - - if (invalidTestIds.Any()) - { - testsToRun = invalidTestIds; - return false; - } - - testsToRun = _testIds.Intersect(testIds).ToArray(); - return true; - } - } -} diff --git a/AgileMapper.PerformanceTester/AbstractMappers/ComplexTypeMapperBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/ComplexTypeMapperBase.cs similarity index 93% rename from AgileMapper.PerformanceTester/AbstractMappers/ComplexTypeMapperBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/ComplexTypeMapperBase.cs index c535486d8..b53db44f7 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/ComplexTypeMapperBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/ComplexTypeMapperBase.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System; using System.Collections.Generic; @@ -7,7 +7,7 @@ using UnitTests.Common; using static TestClasses.Complex; - internal abstract class ComplexTypeMapperBase : MapperTestBase + public abstract class ComplexTypeMapperBase : MapperTestBase { private readonly Foo _foo; @@ -39,6 +39,10 @@ protected ComplexTypeMapperBase() }; } + public override string Type => "compl"; + + public override object SourceObject => _foo; + public override object Execute(Stopwatch timer) => Clone(_foo); public override void Verify(object result) diff --git a/AgileMapper.PerformanceTesting/AbstractMappers/ComplexTypeMapperSetupBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/ComplexTypeMapperSetupBase.cs new file mode 100644 index 000000000..bc14b36de --- /dev/null +++ b/AgileMapper.PerformanceTesting/AbstractMappers/ComplexTypeMapperSetupBase.cs @@ -0,0 +1,13 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers +{ + using static TestClasses.Complex; + + public abstract class ComplexTypeMapperSetupBase : MapperSetupTestBase + { + public override string Type => "compls"; + + protected override object Execute() => SetupComplexTypeMapper((Foo)SourceObject); + + protected abstract Foo SetupComplexTypeMapper(Foo foo); + } +} diff --git a/AgileMapper.PerformanceTester/AbstractMappers/CtorMapperBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/CtorMapperBase.cs similarity index 72% rename from AgileMapper.PerformanceTester/AbstractMappers/CtorMapperBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/CtorMapperBase.cs index bb6bbeca3..66b778cbf 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/CtorMapperBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/CtorMapperBase.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System.Diagnostics; using UnitTests.Common; using static TestClasses.Ctor; - internal abstract class CtorMapperBase : MapperTestBase + public abstract class CtorMapperBase : MapperTestBase { private readonly ValueObject _valueObject; @@ -13,6 +13,10 @@ protected CtorMapperBase() _valueObject = new ValueObject { Value = 5 }; } + public override string Type => "ctor"; + + public override object SourceObject => _valueObject; + public override object Execute(Stopwatch timer) => Construct(_valueObject); protected abstract ConstructedObject Construct(ValueObject valueObject); diff --git a/AgileMapper.PerformanceTester/AbstractMappers/DeepMapperBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/DeepMapperBase.cs similarity index 92% rename from AgileMapper.PerformanceTester/AbstractMappers/DeepMapperBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/DeepMapperBase.cs index efcfd6b73..bec137db0 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/DeepMapperBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/DeepMapperBase.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System.Collections.Generic; using System.Diagnostics; @@ -6,7 +6,7 @@ using UnitTests.Common; using static TestClasses.Deep; - internal abstract class DeepMapperBase : MapperTestBase + public abstract class DeepMapperBase : MapperTestBase { private readonly Customer _customer; @@ -32,6 +32,10 @@ protected DeepMapperBase() }; } + public override string Type => "deep"; + + public override object SourceObject => _customer; + public override object Execute(Stopwatch timer) => Map(_customer); protected abstract CustomerDto Map(Customer customer); diff --git a/AgileMapper.PerformanceTesting/AbstractMappers/DeepMapperSetupBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/DeepMapperSetupBase.cs new file mode 100644 index 000000000..d6fb336b2 --- /dev/null +++ b/AgileMapper.PerformanceTesting/AbstractMappers/DeepMapperSetupBase.cs @@ -0,0 +1,13 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers +{ + using static TestClasses.Deep; + + public abstract class DeepMapperSetupBase : MapperSetupTestBase + { + public override string Type => "deeps"; + + protected override object Execute() => SetupDeepMapper((Customer)SourceObject); + + protected abstract CustomerDto SetupDeepMapper(Customer customer); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/AbstractMappers/EntityMapperBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/EntityMapperBase.cs similarity index 95% rename from AgileMapper.PerformanceTester/AbstractMappers/EntityMapperBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/EntityMapperBase.cs index 586a4eb4a..a3b3dfb95 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/EntityMapperBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/EntityMapperBase.cs @@ -1,15 +1,18 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { - using System; using System.Diagnostics; using static TestClasses.Entities; - internal abstract class EntityMapperBase : MapperTestBase + public abstract class EntityMapperBase : MapperTestBase { private readonly Warehouse _warehouse; + public override string Type => "ent"; + public override int NumberOfExecutions => 100_000; + public override object SourceObject => _warehouse; + protected EntityMapperBase() { var warehouse = new Warehouse diff --git a/AgileMapper.PerformanceTesting/AbstractMappers/EntityMapperSetupBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/EntityMapperSetupBase.cs new file mode 100644 index 000000000..b3b83eafd --- /dev/null +++ b/AgileMapper.PerformanceTesting/AbstractMappers/EntityMapperSetupBase.cs @@ -0,0 +1,13 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers +{ + using static TestClasses.Entities; + + public abstract class EntityMapperSetupBase : MapperSetupTestBase + { + public override string Type => "ents"; + + protected override object Execute() => SetupEntityMapper((Warehouse)SourceObject); + + protected abstract Warehouse SetupEntityMapper(Warehouse warehouse); + } +} diff --git a/AgileMapper.PerformanceTester/AbstractMappers/FlatteningMapperBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/FlatteningMapperBase.cs similarity index 85% rename from AgileMapper.PerformanceTester/AbstractMappers/FlatteningMapperBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/FlatteningMapperBase.cs index f04e32e7c..7cfb56feb 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/FlatteningMapperBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/FlatteningMapperBase.cs @@ -1,11 +1,11 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System; using System.Diagnostics; using UnitTests.Common; using static TestClasses.Flattening; - internal abstract class FlatteningMapperBase : MapperTestBase + public abstract class FlatteningMapperBase : MapperTestBase { private readonly ModelObject _modelObject; @@ -33,6 +33,10 @@ protected FlatteningMapperBase() }; } + public override string Type => "flat"; + + public override object SourceObject => _modelObject; + public override object Execute(Stopwatch timer) => Flatten(_modelObject); protected abstract ModelDto Flatten(ModelObject model); diff --git a/AgileMapper.PerformanceTester/AbstractMappers/IObjectMapperTest.cs b/AgileMapper.PerformanceTesting/AbstractMappers/IObjectMapperTest.cs similarity index 55% rename from AgileMapper.PerformanceTester/AbstractMappers/IObjectMapperTest.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/IObjectMapperTest.cs index 1a8a495a5..1d1715de5 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/IObjectMapperTest.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/IObjectMapperTest.cs @@ -1,13 +1,17 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System.Diagnostics; - internal interface IObjectMapperTest + public interface IObjectMapperTest { + string Type { get; } + string Name { get; } int NumberOfExecutions { get; } + object SourceObject { get; } + void Initialise(); object Execute(Stopwatch timer); diff --git a/AgileMapper.PerformanceTester/AbstractMappers/MapperInstantiationBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/MapperInstantiationBase.cs similarity index 61% rename from AgileMapper.PerformanceTester/AbstractMappers/MapperInstantiationBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/MapperInstantiationBase.cs index 1f83391ac..0817f03c8 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/MapperInstantiationBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/MapperInstantiationBase.cs @@ -1,11 +1,15 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System.Diagnostics; - internal abstract class MapperInstantiationBase : MapperTestBase + public abstract class MapperInstantiationBase : MapperTestBase { + public override string Type => "new"; + public override int NumberOfExecutions => 10_000; + public override object SourceObject => null; + public override void Initialise() { } diff --git a/AgileMapper.PerformanceTesting/AbstractMappers/MapperSetupTestBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/MapperSetupTestBase.cs new file mode 100644 index 000000000..f750bb292 --- /dev/null +++ b/AgileMapper.PerformanceTesting/AbstractMappers/MapperSetupTestBase.cs @@ -0,0 +1,82 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers +{ + using System; + using System.Diagnostics; + using System.Linq; + using System.Reflection; + + public abstract class MapperSetupTestBase : IObjectMapperTest + { + private readonly IObjectMapperTest _mapperTest; + + protected MapperSetupTestBase() + { + var mapperTestType = FindTestTypeOrThrow(); + + _mapperTest = (IObjectMapperTest)Activator.CreateInstance(mapperTestType); + } + + private Type FindTestTypeOrThrow() + { + var type = GetType(); + var testName = type.Name.Replace("Setup", null); + var testFullName = $"{type.Namespace}.{testName}"; + + var testType = type.Assembly.GetType(testFullName, throwOnError: false); + + if (testType != null) + { + return testType; + } + + testType = Assembly + .GetExecutingAssembly() + .GetTypes() + .FirstOrDefault(t => t.Name == testName); + + if (testType != null) + { + return testType; + } + + throw new InvalidOperationException("Couldn't find mapper test " + testName); + } + + public abstract string Type { get; } + + public string Name => GetType().Name; + + public int NumberOfExecutions => 100; + + public object SourceObject => _mapperTest.SourceObject; + + public abstract void Initialise(); + + public object Execute(Stopwatch timer) + { + timer.Stop(); + + Reset(); + + timer.Start(); + + var mapped = Execute(); + + timer.Stop(); + + _mapperTest.Verify(mapped); + + timer.Start(); + + return null; + } + + protected abstract object Execute(); + + public void Verify(object result) + { + } + + protected abstract void Reset(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/AbstractMappers/MapperTestBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/MapperTestBase.cs similarity index 56% rename from AgileMapper.PerformanceTester/AbstractMappers/MapperTestBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/MapperTestBase.cs index 8ef6b0f99..30f67aedd 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/MapperTestBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/MapperTestBase.cs @@ -1,17 +1,21 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System.Diagnostics; - internal abstract class MapperTestBase : IObjectMapperTest + public abstract class MapperTestBase : IObjectMapperTest { + public abstract string Type { get; } + public string Name => GetType().Name; public virtual int NumberOfExecutions => 1_000_000; + public abstract object SourceObject { get; } + public abstract void Initialise(); public abstract object Execute(Stopwatch timer); - + public abstract void Verify(object result); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/AbstractMappers/UnflatteningMapperBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/UnflatteningMapperBase.cs similarity index 85% rename from AgileMapper.PerformanceTester/AbstractMappers/UnflatteningMapperBase.cs rename to AgileMapper.PerformanceTesting/AbstractMappers/UnflatteningMapperBase.cs index 7183ad223..a33a3e77d 100644 --- a/AgileMapper.PerformanceTester/AbstractMappers/UnflatteningMapperBase.cs +++ b/AgileMapper.PerformanceTesting/AbstractMappers/UnflatteningMapperBase.cs @@ -1,11 +1,11 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.AbstractMappers +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers { using System; using System.Diagnostics; using UnitTests.Common; using static TestClasses.Flattening; - internal abstract class UnflatteningMapperBase : MapperTestBase + public abstract class UnflatteningMapperBase : MapperTestBase { private readonly ModelDto _modelDto; @@ -21,6 +21,10 @@ protected UnflatteningMapperBase() }; } + public override string Type => "unflat"; + + public override object SourceObject => _modelDto; + public override object Execute(Stopwatch timer) => Unflatten(_modelDto); protected abstract ModelObject Unflatten(ModelDto dto); diff --git a/AgileMapper.PerformanceTesting/AbstractMappers/UnflatteningMapperSetupBase.cs b/AgileMapper.PerformanceTesting/AbstractMappers/UnflatteningMapperSetupBase.cs new file mode 100644 index 000000000..363ca0d4a --- /dev/null +++ b/AgileMapper.PerformanceTesting/AbstractMappers/UnflatteningMapperSetupBase.cs @@ -0,0 +1,13 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.AbstractMappers +{ + using static TestClasses.Flattening; + + public abstract class UnflatteningMapperSetupBase : MapperSetupTestBase + { + public override string Type => "unflats"; + + protected override object Execute() => SetupUnflatteningMapper((ModelDto)SourceObject); + + protected abstract ModelObject SetupUnflatteningMapper(ModelDto dto); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/AgileMapper.PerformanceTesting.csproj b/AgileMapper.PerformanceTesting/AgileMapper.PerformanceTesting.csproj new file mode 100644 index 000000000..576ba6067 --- /dev/null +++ b/AgileMapper.PerformanceTesting/AgileMapper.PerformanceTesting.csproj @@ -0,0 +1,22 @@ + + + + + net45;netstandard2.0 + AgileObjects.AgileMapper.PerformanceTesting + AgileObjects.AgileMapper.PerformanceTesting + + + + + + + + + + + + + + + diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapper.cs similarity index 69% rename from AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapper.cs index 8ad67ac4c..dc5361518 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper { using AbstractMappers; using static TestClasses.Complex; - internal class AgileMapperComplexTypeMapper : ComplexTypeMapperBase + public class AgileMapperComplexTypeMapper : ComplexTypeMapperBase { private IMapper _mapper; diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapperSetup.cs new file mode 100644 index 000000000..aa11573ee --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperComplexTypeMapperSetup.cs @@ -0,0 +1,25 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper +{ + using AbstractMappers; + using static TestClasses.Complex; + + public class AgileMapperComplexTypeMapperSetup : ComplexTypeMapperSetupBase + { + private IMapper _mapper; + + public override void Initialise() => _mapper = Mapper.CreateNew(); + + protected override Foo SetupComplexTypeMapper(Foo foo) + { + _mapper.GetPlanFor().ToANew(); + + return _mapper.Map(foo).ToANew(); + } + + protected override void Reset() + { + _mapper.Dispose(); + _mapper.WhenMapping.DisableObjectTracking(); + } + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperCtorMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperCtorMapper.cs similarity index 70% rename from AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperCtorMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperCtorMapper.cs index 8062a3a08..3e5a0d44f 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperCtorMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperCtorMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper { using AbstractMappers; using static TestClasses.Ctor; - internal class AgileMapperCtorMapper : CtorMapperBase + public class AgileMapperCtorMapper : CtorMapperBase { private IMapper _mapper; diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperDeepMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperDeepMapper.cs similarity index 54% rename from AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperDeepMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperDeepMapper.cs index 1036f2e09..35cc5b621 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperDeepMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperDeepMapper.cs @@ -1,15 +1,15 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper { using AbstractMappers; using static TestClasses.Deep; - internal class AgileMapperDeepMapper : DeepMapperBase + public class AgileMapperDeepMapper : DeepMapperBase { private IMapper _mapper; public override void Initialise() => _mapper = Mapper.CreateNew(); - protected override CustomerDto Map(Customer customer) + protected override CustomerDto Map(Customer customer) => _mapper.Map(customer).ToANew(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperDeepMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperDeepMapperSetup.cs new file mode 100644 index 000000000..be487ed5d --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperDeepMapperSetup.cs @@ -0,0 +1,21 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper +{ + using AbstractMappers; + using static TestClasses.Deep; + + public class AgileMapperDeepMapperSetup : DeepMapperSetupBase + { + private IMapper _mapper; + + public override void Initialise() => _mapper = Mapper.CreateNew(); + + protected override CustomerDto SetupDeepMapper(Customer customer) + { + _mapper.GetPlanFor().ToANew(); + + return _mapper.Map(customer).ToANew(); + } + + protected override void Reset() => _mapper.Dispose(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperEntityMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperEntityMapper.cs similarity index 67% rename from AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperEntityMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperEntityMapper.cs index 90204ba6a..dfe051cec 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperEntityMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperEntityMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper { using AbstractMappers; using static TestClasses.Entities; - internal class AgileMapperEntityMapper : EntityMapperBase + public class AgileMapperEntityMapper : EntityMapperBase { private IMapper _mapper; diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperEntityMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperEntityMapperSetup.cs new file mode 100644 index 000000000..8e2388da0 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperEntityMapperSetup.cs @@ -0,0 +1,21 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper +{ + using AbstractMappers; + using static TestClasses.Entities; + + public class AgileMapperEntityMapperSetup : EntityMapperSetupBase + { + private IMapper _mapper; + + public override void Initialise() => _mapper = Mapper.CreateNew(); + + protected override Warehouse SetupEntityMapper(Warehouse warehouse) + { + _mapper.GetPlanFor().ToANew(); + + return _mapper.Map(warehouse).ToANew(); + } + + protected override void Reset() => _mapper.Dispose(); + } +} diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperFlatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperFlatteningMapper.cs similarity index 66% rename from AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperFlatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperFlatteningMapper.cs index a88e06d55..7fad73c06 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AgileMapper/AgileMapperFlatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperFlatteningMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AgileMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper { using AbstractMappers; using static TestClasses.Flattening; - internal class AgileMapperFlatteningMapper : FlatteningMapperBase + public class AgileMapperFlatteningMapper : FlatteningMapperBase { private IMapper _mapper; diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperInstantiation.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperInstantiation.cs new file mode 100644 index 000000000..abcb3a301 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperInstantiation.cs @@ -0,0 +1,9 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper +{ + using AbstractMappers; + + public class AgileMapperInstantiation : MapperInstantiationBase + { + protected override object CreateMapperInstance() => Mapper.CreateNew(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapper.cs new file mode 100644 index 000000000..cea905cb4 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapper.cs @@ -0,0 +1,15 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper +{ + using AbstractMappers; + using static TestClasses.Flattening; + + public class AgileMapperUnflatteningMapper : UnflatteningMapperBase + { + private IMapper _mapper; + + public override void Initialise() => _mapper = Mapper.CreateNew(); + + protected override ModelObject Unflatten(ModelDto dto) + => _mapper.Map(dto).ToANew(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapperSetup.cs new file mode 100644 index 000000000..4ff01d5ce --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AgileMapper/AgileMapperUnflatteningMapperSetup.cs @@ -0,0 +1,21 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AgileMapper +{ + using AbstractMappers; + using static TestClasses.Flattening; + + public class AgileMapperUnflatteningMapperSetup : UnflatteningMapperSetupBase + { + private IMapper _mapper; + + public override void Initialise() => _mapper = Mapper.CreateNew(); + + protected override ModelObject SetupUnflatteningMapper(ModelDto dto) + { + _mapper.GetPlanFor().ToANew(); + + return _mapper.Map(dto).ToANew(); + } + + protected override void Reset() => _mapper.Dispose(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapper.cs similarity index 58% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapper.cs index 9feb0b5dd..8551ea675 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; using static TestClasses.Complex; - internal class AutoMapperComplexTypeMapper : ComplexTypeMapperBase + public class AutoMapperComplexTypeMapper : ComplexTypeMapperBase { private IMapper _mapper; @@ -18,9 +18,6 @@ public override void Initialise() _mapper = config.CreateMapper(); } - protected override Foo Clone(Foo foo) - { - return _mapper.Map(foo); - } + protected override Foo Clone(Foo foo) => _mapper.Map(foo); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapperSetup.cs new file mode 100644 index 000000000..106a54620 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperComplexTypeMapperSetup.cs @@ -0,0 +1,22 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper +{ + using AbstractMappers; + using global::AutoMapper; + using static TestClasses.Complex; + + public class AutoMapperComplexTypeMapperSetup : ComplexTypeMapperSetupBase + { + public override void Initialise() + { + } + + protected override Foo SetupComplexTypeMapper(Foo foo) + { + Mapper.Initialize(cfg => cfg.CreateMap()); + + return Mapper.Map(foo); + } + + protected override void Reset() => Mapper.Reset(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperCtorMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperCtorMapper.cs similarity index 77% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperCtorMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperCtorMapper.cs index 7faa26ccc..cdf19cc3e 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperCtorMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperCtorMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; using static TestClasses.Ctor; - internal class AutoMapperCtorMapper : CtorMapperBase + public class AutoMapperCtorMapper : CtorMapperBase { private IMapper _mapper; @@ -18,7 +18,7 @@ public override void Initialise() _mapper = config.CreateMapper(); } - protected override ConstructedObject Construct(ValueObject valueObject) + protected override ConstructedObject Construct(ValueObject valueObject) => _mapper.Map(valueObject); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperDeepMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperDeepMapper.cs similarity index 81% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperDeepMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperDeepMapper.cs index 6fede5bdd..ee1e89420 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperDeepMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperDeepMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; using static TestClasses.Deep; - internal class AutoMapperDeepMapper : DeepMapperBase + public class AutoMapperDeepMapper : DeepMapperBase { private IMapper _mapper; diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperDeepMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperDeepMapperSetup.cs similarity index 62% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperDeepMapperSetup.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperDeepMapperSetup.cs index 785fd8f48..14e7e4232 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperDeepMapperSetup.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperDeepMapperSetup.cs @@ -1,16 +1,16 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; using static TestClasses.Deep; - internal class AutoMapperDeepMapperSetup : DeepMapperSetupBase + public class AutoMapperDeepMapperSetup : DeepMapperSetupBase { public override void Initialise() { } - protected override void SetupDeepMapper() + protected override CustomerDto SetupDeepMapper(Customer customer) { Mapper.Initialize(cfg => { @@ -19,7 +19,7 @@ protected override void SetupDeepMapper() cfg.CreateMap(); }); - Mapper.Map(new Customer()); + return Mapper.Map(customer); } protected override void Reset() => Mapper.Reset(); diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperEntityMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperEntityMapper.cs new file mode 100644 index 000000000..2f598064f --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperEntityMapper.cs @@ -0,0 +1,38 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper +{ + using AbstractMappers; + using global::AutoMapper; + using static TestClasses.Entities; + + public class AutoMapperEntityMapper : EntityMapperBase + { + private IMapper _mapper; + + public override void Initialise() + { + var config = new MapperConfiguration(cfg => + { + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + //cfg.CreateMap(); + }); + + _mapper = config.CreateMapper(); + } + + protected override Warehouse Clone(Warehouse warehouse) + => _mapper.Map(warehouse); + } +} diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperEntityMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperEntityMapperSetup.cs new file mode 100644 index 000000000..3c73c5341 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperEntityMapperSetup.cs @@ -0,0 +1,41 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper +{ + // Mapper.Map(warehouse); throws a StackOverflow exception + + //using AbstractMappers; + //using global::AutoMapper; + //using static TestClasses.Entities; + + //public class AutoMapperEntityMapperSetup : EntityMapperSetupBase + //{ + // public override void Initialise() + // { + // } + + // protected override Warehouse SetupEntityMapper(Warehouse warehouse) + // { + // Mapper.Initialize(cfg => + // { + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // cfg.CreateMap(); + // }); + + // return Mapper.Map(warehouse); + // } + + // protected override void Reset() => Mapper.Reset(); + //} +} diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperFlatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperFlatteningMapper.cs similarity index 66% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperFlatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperFlatteningMapper.cs index 036b06913..59a960469 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperFlatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperFlatteningMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; using static TestClasses.Flattening; - internal class AutoMapperFlatteningMapper : FlatteningMapperBase + public class AutoMapperFlatteningMapper : FlatteningMapperBase { private IMapper _mapper; @@ -19,8 +19,6 @@ public override void Initialise() } protected override ModelDto Flatten(ModelObject model) - { - return _mapper.Map(model); - } + => _mapper.Map(model); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperInstantiation.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperInstantiation.cs similarity index 54% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperInstantiation.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperInstantiation.cs index ca389b8cb..cca894ef1 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperInstantiation.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperInstantiation.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; - internal class AutoMapperInstantiation : MapperInstantiationBase + public class AutoMapperInstantiation : MapperInstantiationBase { protected override object CreateMapperInstance() => new Mapper(new MapperConfiguration(cfg => { })); } diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapper.cs similarity index 66% rename from AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapper.cs index f065e845a..4077d4775 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.AutoMapper +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper { using AbstractMappers; using global::AutoMapper; using static TestClasses.Flattening; - internal class AutoMapperUnflatteningMapper : UnflatteningMapperBase + public class AutoMapperUnflatteningMapper : UnflatteningMapperBase { private IMapper _mapper; @@ -19,8 +19,6 @@ public override void Initialise() } protected override ModelObject Unflatten(ModelDto dto) - { - return _mapper.Map(dto); - } + => _mapper.Map(dto); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapperSetup.cs new file mode 100644 index 000000000..815dbc1c8 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/AutoMapper/AutoMapperUnflatteningMapperSetup.cs @@ -0,0 +1,22 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.AutoMapper +{ + using AbstractMappers; + using global::AutoMapper; + using static TestClasses.Flattening; + + public class AutoMapperUnflatteningMapperSetup : UnflatteningMapperSetupBase + { + public override void Initialise() + { + } + + protected override ModelObject SetupUnflatteningMapper(ModelDto dto) + { + Mapper.Initialize(cfg => cfg.CreateMap().ReverseMap()); + + return Mapper.Map(dto); + } + + protected override void Reset() => Mapper.Reset(); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualComplexTypeMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualComplexTypeMapper.cs similarity index 89% rename from AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualComplexTypeMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualComplexTypeMapper.cs index ce0d71298..2ece48ab9 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualComplexTypeMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualComplexTypeMapper.cs @@ -1,11 +1,11 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Manual +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Manual { using System.Collections.Generic; using System.Linq; using AbstractMappers; using static TestClasses.Complex; - internal class ManualComplexTypeMapper : ComplexTypeMapperBase + public class ManualComplexTypeMapper : ComplexTypeMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualCtorMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualCtorMapper.cs similarity index 75% rename from AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualCtorMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualCtorMapper.cs index a39996bac..9a9b2a4bb 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualCtorMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualCtorMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Manual +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Manual { using AbstractMappers; using static TestClasses.Ctor; - internal class ManualCtorMapper : CtorMapperBase + public class ManualCtorMapper : CtorMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualDeepMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualDeepMapper.cs similarity index 94% rename from AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualDeepMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualDeepMapper.cs index d80227c78..9f7e4f6ca 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualDeepMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualDeepMapper.cs @@ -1,11 +1,11 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Manual +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Manual { using System.Collections.Generic; using System.Linq; using AbstractMappers; using static TestClasses.Deep; - internal class ManualDeepMapper : DeepMapperBase + public class ManualDeepMapper : DeepMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualFlatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualFlatteningMapper.cs similarity index 87% rename from AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualFlatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualFlatteningMapper.cs index d9e775eee..c37a9ab6e 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualFlatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualFlatteningMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Manual +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Manual { using AbstractMappers; using static TestClasses.Flattening; - internal class ManualFlatteningMapper : FlatteningMapperBase + public class ManualFlatteningMapper : FlatteningMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualUnflatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualUnflatteningMapper.cs similarity index 86% rename from AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualUnflatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualUnflatteningMapper.cs index 894636902..a1bd95586 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Manual/ManualUnflatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Manual/ManualUnflatteningMapper.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Manual +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Manual { using AbstractMappers; using static TestClasses.Flattening; - internal class ManualUnflatteningMapper : UnflatteningMapperBase + public class ManualUnflatteningMapper : UnflatteningMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterComplexTypeMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterComplexTypeMapper.cs similarity index 82% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterComplexTypeMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterComplexTypeMapper.cs index 47729ac38..e922565bd 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterComplexTypeMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterComplexTypeMapper.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using System.Collections.Generic; using System.Linq; @@ -6,7 +6,7 @@ using global::Mapster; using static TestClasses.Complex; - internal class MapsterComplexTypeMapper : ComplexTypeMapperBase + public class MapsterComplexTypeMapper : ComplexTypeMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterComplexTypeMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterComplexTypeMapperSetup.cs similarity index 68% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterComplexTypeMapperSetup.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterComplexTypeMapperSetup.cs index 2887cd379..421794d48 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterComplexTypeMapperSetup.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterComplexTypeMapperSetup.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using System.Collections.Generic; using System.Linq; @@ -6,18 +6,13 @@ using global::Mapster; using static TestClasses.Complex; - internal class MapsterComplexTypeMapperSetup : ComplexTypeMapperSetupBase + public class MapsterComplexTypeMapperSetup : ComplexTypeMapperSetupBase { public override void Initialise() { } - protected override void Reset() - { - TypeAdapterConfig.Clear(); - } - - protected override void SetupComplexTypeMapper() + protected override Foo SetupComplexTypeMapper(Foo foo) { TypeAdapterConfig.NewConfig() .Map(dest => dest.Foos, src => src.Foos ?? new List()) @@ -26,7 +21,10 @@ protected override void SetupComplexTypeMapper() .Map(dest => dest.IntArray, src => src.IntArray ?? new int[0]) .Compile(); - new Foo().Adapt(); + return foo.Adapt(); } + + protected override void Reset() + => TypeAdapterConfig.Clear(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterCtorMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterCtorMapper.cs similarity index 60% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterCtorMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterCtorMapper.cs index 8eca9e45c..2b64812c4 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterCtorMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterCtorMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using AbstractMappers; using global::Mapster; using static TestClasses.Ctor; - internal class MapsterCtorMapper : CtorMapperBase + public class MapsterCtorMapper : CtorMapperBase { public override void Initialise() { @@ -13,8 +13,6 @@ public override void Initialise() } protected override ConstructedObject Construct(ValueObject valueObject) - { - return valueObject.Adapt(); - } + => valueObject.Adapt(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterDeepMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterDeepMapper.cs similarity index 71% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterDeepMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterDeepMapper.cs index 4a3fc8a0d..5fd0e4ee3 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterDeepMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterDeepMapper.cs @@ -1,11 +1,11 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using System.Collections.Generic; using AbstractMappers; using global::Mapster; using static TestClasses.Deep; - internal class MapsterDeepMapper : DeepMapperBase + public class MapsterDeepMapper : DeepMapperBase { public override void Initialise() { @@ -16,8 +16,6 @@ public override void Initialise() } protected override CustomerDto Map(Customer customer) - { - return customer.Adapt(); - } + => customer.Adapt(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterDeepMapperSetup.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterDeepMapperSetup.cs similarity index 64% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterDeepMapperSetup.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterDeepMapperSetup.cs index 7ff2eccbe..e03a04a4c 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterDeepMapperSetup.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterDeepMapperSetup.cs @@ -1,27 +1,27 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using System.Collections.Generic; using AbstractMappers; using global::Mapster; using static TestClasses.Deep; - internal class MapsterDeepMapperSetup : DeepMapperSetupBase + public class MapsterDeepMapperSetup : DeepMapperSetupBase { public override void Initialise() { } - protected override void SetupDeepMapper() + protected override CustomerDto SetupDeepMapper(Customer customer) { TypeAdapterConfig.NewConfig() .Map(dest => dest.Addresses, src => src.Addresses ?? new List
()) .Map(dest => dest.AddressesArray, src => src.AddressesArray ?? new Address[0]) .Compile(); - new Customer().Adapt(); + return customer.Adapt(); } - protected override void Reset() + protected override void Reset() => TypeAdapterConfig.Clear(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterEntityMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterEntityMapper.cs similarity index 64% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterEntityMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterEntityMapper.cs index 8ee2bbc52..d9fe6b531 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterEntityMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterEntityMapper.cs @@ -1,15 +1,15 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using AbstractMappers; using global::Mapster; using static TestClasses.Entities; - internal class MapsterEntityMapper : EntityMapperBase + public class MapsterEntityMapper : EntityMapperBase { public override void Initialise() { TypeAdapterConfig.NewConfig() - // .Map(dest => dest.Foos, src => src.Foos ?? new List()) + // .Map(dest => dest.Foos, src => src.Foos ?? new List()) .Compile(); } diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterFlatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterFlatteningMapper.cs similarity index 59% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterFlatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterFlatteningMapper.cs index 8d1738ab7..30ee877e3 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterFlatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterFlatteningMapper.cs @@ -1,10 +1,10 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using AbstractMappers; using global::Mapster; using static TestClasses.Flattening; - internal class MapsterFlatteningMapper : FlatteningMapperBase + public class MapsterFlatteningMapper : FlatteningMapperBase { public override void Initialise() { @@ -13,8 +13,6 @@ public override void Initialise() } protected override ModelDto Flatten(ModelObject model) - { - return model.Adapt(); - } + => model.Adapt(); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterMapperInstantiation.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterMapperInstantiation.cs similarity index 52% rename from AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterMapperInstantiation.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterMapperInstantiation.cs index 033c5ed7c..dd1f09c85 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/Mapster/MapsterMapperInstantiation.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/Mapster/MapsterMapperInstantiation.cs @@ -1,9 +1,9 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.Mapster +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.Mapster { using AbstractMappers; using global::Mapster; - internal class MapsterMapperInstantiation : MapperInstantiationBase + public class MapsterMapperInstantiation : MapperInstantiationBase { protected override object CreateMapperInstance() => new Adapter(new TypeAdapterConfig()); } diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterComplexTypeMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterComplexTypeMapper.cs similarity index 89% rename from AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterComplexTypeMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterComplexTypeMapper.cs index 58fa66489..a078bfa14 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterComplexTypeMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterComplexTypeMapper.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ValueInjecter +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.ValueInjecter { using System; using System.Collections; @@ -10,7 +10,7 @@ using Omu.ValueInjecter.Injections; using static TestClasses.Complex; - internal class ValueInjecterComplexTypeMapper : ComplexTypeMapperBase + public class ValueInjecterComplexTypeMapper : ComplexTypeMapperBase { public override void Initialise() { @@ -18,16 +18,18 @@ public override void Initialise() } protected override Foo Clone(Foo foo) - { - return (Foo)new Foo().InjectFrom(foo); - } + => (Foo)new Foo().InjectFrom(foo); public class CloneInjection : LoopInjection { protected override void Execute(PropertyInfo sp, object source, object target) { var tp = target.GetType().GetProperty(sp.Name); - if (tp == null) return; + if (tp == null) + { + return; + } + var val = sp.GetValue(source); tp.SetValue(target, GetClone(sp, val)); @@ -53,7 +55,10 @@ private static object GetClone(PropertyInfo sp, object val) for (int index = 0; index < arr.Length; index++) { var a = arr.GetValue(index); - if (a.GetType().IsValueType || a is string) continue; + if (a.GetType().IsValueType || a is string) + { + continue; + } arrClone.SetValue(Activator.CreateInstance(a.GetType()).InjectFrom(a), index); } diff --git a/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterCtorMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterCtorMapper.cs new file mode 100644 index 000000000..acba7c1e0 --- /dev/null +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterCtorMapper.cs @@ -0,0 +1,15 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.ValueInjecter +{ + using AbstractMappers; + using Omu.ValueInjecter; + using static TestClasses.Ctor; + + public class ValueInjecterCtorMapper : CtorMapperBase + { + public override void Initialise() + => Mapper.AddMap(src => new ConstructedObject(src.Value)); + + protected override ConstructedObject Construct(ValueObject valueObject) + => Mapper.Map(valueObject); + } +} \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterDeepMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterDeepMapper.cs similarity index 86% rename from AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterDeepMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterDeepMapper.cs index d2ef8df28..9ed1e2641 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterDeepMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterDeepMapper.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ValueInjecter +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.ValueInjecter { using System.Collections.Generic; using System.Linq; @@ -7,7 +7,7 @@ using Omu.ValueInjecter.Injections; using static TestClasses.Deep; - internal class ValueInjecterDeepMapper : DeepMapperBase + public class ValueInjecterDeepMapper : DeepMapperBase { public override void Initialise() { diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterFlatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterFlatteningMapper.cs similarity index 51% rename from AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterFlatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterFlatteningMapper.cs index 5eeab0d18..44d3514c8 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterFlatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterFlatteningMapper.cs @@ -1,19 +1,17 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ValueInjecter +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.ValueInjecter { using AbstractMappers; using Omu.ValueInjecter; using Omu.ValueInjecter.Injections; using static TestClasses.Flattening; - internal class ValueInjecterFlatteningMapper : FlatteningMapperBase + public class ValueInjecterFlatteningMapper : FlatteningMapperBase { public override void Initialise() { } protected override ModelDto Flatten(ModelObject model) - { - return (ModelDto)new ModelDto().InjectFrom(model); - } + => (ModelDto)new ModelDto().InjectFrom(model); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterUnflatteningMapper.cs b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterUnflatteningMapper.cs similarity index 50% rename from AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterUnflatteningMapper.cs rename to AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterUnflatteningMapper.cs index c13377d1c..c43521ea5 100644 --- a/AgileMapper.PerformanceTester/ConcreteMappers/ValueInjecter/ValueInjecterUnflatteningMapper.cs +++ b/AgileMapper.PerformanceTesting/ConcreteMappers/ValueInjecter/ValueInjecterUnflatteningMapper.cs @@ -1,19 +1,17 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.ConcreteMappers.ValueInjecter +namespace AgileObjects.AgileMapper.PerformanceTesting.ConcreteMappers.ValueInjecter { using AbstractMappers; using Omu.ValueInjecter; using Omu.ValueInjecter.Injections; using static TestClasses.Flattening; - internal class ValueInjecterUnflatteningMapper : UnflatteningMapperBase + public class ValueInjecterUnflatteningMapper : UnflatteningMapperBase { public override void Initialise() { } protected override ModelObject Unflatten(ModelDto dto) - { - return (ModelObject)new ModelObject().InjectFrom(dto); - } + => (ModelObject)new ModelObject().InjectFrom(dto); } } \ No newline at end of file diff --git a/AgileMapper.PerformanceTesting/MapperIds.cs b/AgileMapper.PerformanceTesting/MapperIds.cs new file mode 100644 index 000000000..6a6a1e0af --- /dev/null +++ b/AgileMapper.PerformanceTesting/MapperIds.cs @@ -0,0 +1,11 @@ +namespace AgileObjects.AgileMapper.PerformanceTesting +{ + public static class MapperIds + { + public const string Manual = "man"; + public const string AgileMapper = "ag"; + public const string AutoMapper = "au"; + public const string Mapster = "ma"; + public const string ValueInjecter = "vi"; + } +} diff --git a/AgileMapper.PerformanceTester/MapperTester.cs b/AgileMapper.PerformanceTesting/MapperTester.cs similarity index 89% rename from AgileMapper.PerformanceTester/MapperTester.cs rename to AgileMapper.PerformanceTesting/MapperTester.cs index 4ff9b678a..acba386ca 100644 --- a/AgileMapper.PerformanceTester/MapperTester.cs +++ b/AgileMapper.PerformanceTesting/MapperTester.cs @@ -1,11 +1,11 @@ -namespace AgileObjects.AgileMapper.PerformanceTester +namespace AgileObjects.AgileMapper.PerformanceTesting { using System; using System.Collections.Generic; using System.Diagnostics; using AbstractMappers; - internal class MapperTester + public class MapperTester { public static void Test(IEnumerable mapperTests) { diff --git a/AgileMapper.PerformanceTesting/PerformanceTestRunner.cs b/AgileMapper.PerformanceTesting/PerformanceTestRunner.cs new file mode 100644 index 000000000..506375593 --- /dev/null +++ b/AgileMapper.PerformanceTesting/PerformanceTestRunner.cs @@ -0,0 +1,161 @@ +// Largely based on the AutoMapper benchmark project: +// Project: https://github.com/AutoMapper/AutoMapper/tree/master/src/Benchmark +// Licence: https://github.com/AutoMapper/AutoMapper/blob/master/LICENSE.txt + +namespace AgileObjects.AgileMapper.PerformanceTesting +{ + using System; + using System.Collections.Generic; + using System.Linq; + using AbstractMappers; + using ConcreteMappers.AgileMapper; + using ConcreteMappers.AutoMapper; + using ConcreteMappers.Manual; + using ConcreteMappers.Mapster; + using ConcreteMappers.ValueInjecter; + using Extensions; + using static MapperIds; + + public class PerformanceTestRunner + { + private static readonly string[] _testIds = + { "ctor", "compl", "compls", "flat", "unflat", "unflats", "deep", "deeps", "ent", "ents", "new" }; + + private readonly Dictionary> _mapperTestsByMapperId; + + public PerformanceTestRunner() + { + _mapperTestsByMapperId = new Dictionary> + { + [Manual] = GetMapperTestsFor(typeof(ManualCtorMapper)), + [AgileMapper] = GetMapperTestsFor(typeof(AgileMapperCtorMapper)), + [AutoMapper] = GetMapperTestsFor(typeof(AutoMapperCtorMapper)), + [Mapster] = GetMapperTestsFor(typeof(MapsterCtorMapper)), + [ValueInjecter] = GetMapperTestsFor(typeof(ValueInjecterCtorMapper)) + }; + } + + private static ICollection GetMapperTestsFor(Type exampleMapperTestType) + { + return exampleMapperTestType + .Assembly + .GetTypes() + .Filter(t => (t.Namespace == exampleMapperTestType.Namespace) && typeof(IObjectMapperTest).IsAssignableFrom(t)) + .Project(CreateTest) + .ToList(); + } + + private static IObjectMapperTest CreateTest(Type testType) + => (IObjectMapperTest)Activator.CreateInstance(testType); + + public PerformanceTestRunner AddMapper(string id, Type exampleMapperTestType) + { + _mapperTestsByMapperId[id] = GetMapperTestsFor(exampleMapperTestType); + return this; + } + + public PerformanceTestRunner AddTest(string mapperId, Type testType) + { + _mapperTestsByMapperId[mapperId].Add(CreateTest(testType)); + return this; + } + + public void Run(string[] args) + { + Console.WriteLine("Starting..."); + + if (!TryGetMappersToTest(args, out var mappersToTest)) + { + Console.WriteLine( + "Invalid mapper(s) specified: {0}{1}Available mapper ids: {2}", + string.Join(", ", mappersToTest), + Environment.NewLine, + string.Join(", ", _mapperTestsByMapperId.Keys)); + } + + if (!TryGetTestsToRun(args, out var testsToRun)) + { + Console.WriteLine( + "Invalid test(s) specified: {0}{1}Available tests: {2}", + string.Join(", ", testsToRun), + Environment.NewLine, + string.Join(", ", _testIds)); + } + + var mapperTestsByType = _mapperTestsByMapperId + .SelectMany(kvp => kvp.Value.Project(mapperTest => new + { + MapperId = kvp.Key, + Test = mapperTest + })) + .GroupBy(d => d.Test.Type) + .ToDictionary(grp => grp.Key, grp => grp.ToArray()); + + var mapperTestSets = _testIds + .Filter(testId => testsToRun.Contains(testId)) + .Project(testId => mapperTestsByType[testId] + .Filter(d => mappersToTest.Contains(d.MapperId)) + .OrderBy(d => d.MapperId) + .Project(d => d.Test) + .ToArray()) + .ToArray(); + + foreach (var mapperTestSet in mapperTestSets) + { + MapperTester.Test(mapperTestSet); + Console.WriteLine(); + } + + Console.WriteLine("Done!"); + Console.ReadLine(); + } + + private bool TryGetMappersToTest(IList args, out ICollection mappersToTest) + { + if (args.Count == 0) + { + mappersToTest = _mapperTestsByMapperId.Keys; + return true; + } + + if (args[0] == "*") + { + mappersToTest = _mapperTestsByMapperId.Keys; + return true; + } + + var mapperIds = args[0].ToLowerInvariant().Split(','); + var invalidMapperIds = mapperIds.Except(_mapperTestsByMapperId.Keys).ToArray(); + + if (invalidMapperIds.Any()) + { + mappersToTest = invalidMapperIds; + return false; + } + + mappersToTest = _mapperTestsByMapperId.Keys.Intersect(mapperIds).ToArray(); + return true; + } + + private static bool TryGetTestsToRun(IList args, out string[] testsToRun) + { + if (args.Count < 2) + { + testsToRun = _testIds; + return true; + } + + var testIds = args[1].ToLowerInvariant().Split(','); + var invalidTestIds = testIds.Except(_testIds).ToArray(); + + if (invalidTestIds.Any()) + { + testsToRun = invalidTestIds; + return false; + } + + testsToRun = _testIds.Intersect(testIds).ToArray(); + return true; + } + } +} diff --git a/AgileMapper.PerformanceTester/TestClasses/Ctor.cs b/AgileMapper.PerformanceTesting/TestClasses/Ctor.cs similarity index 83% rename from AgileMapper.PerformanceTester/TestClasses/Ctor.cs rename to AgileMapper.PerformanceTesting/TestClasses/Ctor.cs index ab2ad466c..2282e7f8b 100644 --- a/AgileMapper.PerformanceTester/TestClasses/Ctor.cs +++ b/AgileMapper.PerformanceTesting/TestClasses/Ctor.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.TestClasses +namespace AgileObjects.AgileMapper.PerformanceTesting.TestClasses { public static class Ctor { diff --git a/AgileMapper.PerformanceTester/TestClasses/Deep.cs b/AgileMapper.PerformanceTesting/TestClasses/Deep.cs similarity index 95% rename from AgileMapper.PerformanceTester/TestClasses/Deep.cs rename to AgileMapper.PerformanceTesting/TestClasses/Deep.cs index 087160678..8b7a16193 100644 --- a/AgileMapper.PerformanceTester/TestClasses/Deep.cs +++ b/AgileMapper.PerformanceTesting/TestClasses/Deep.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.TestClasses +namespace AgileObjects.AgileMapper.PerformanceTesting.TestClasses { using System.Collections.Generic; diff --git a/AgileMapper.PerformanceTester/TestClasses/Entities.cs b/AgileMapper.PerformanceTesting/TestClasses/Entities.cs similarity index 98% rename from AgileMapper.PerformanceTester/TestClasses/Entities.cs rename to AgileMapper.PerformanceTesting/TestClasses/Entities.cs index bb4254296..b396bf50f 100644 --- a/AgileMapper.PerformanceTester/TestClasses/Entities.cs +++ b/AgileMapper.PerformanceTesting/TestClasses/Entities.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.TestClasses +namespace AgileObjects.AgileMapper.PerformanceTesting.TestClasses { using System.Collections.Generic; using System.ComponentModel.DataAnnotations; diff --git a/AgileMapper.PerformanceTester/TestClasses/Flattening.cs b/AgileMapper.PerformanceTesting/TestClasses/Flattening.cs similarity index 91% rename from AgileMapper.PerformanceTester/TestClasses/Flattening.cs rename to AgileMapper.PerformanceTesting/TestClasses/Flattening.cs index a040608bd..6e19bad4e 100644 --- a/AgileMapper.PerformanceTester/TestClasses/Flattening.cs +++ b/AgileMapper.PerformanceTesting/TestClasses/Flattening.cs @@ -1,7 +1,7 @@ -using System; - -namespace AgileObjects.AgileMapper.PerformanceTester.TestClasses +namespace AgileObjects.AgileMapper.PerformanceTesting.TestClasses { + using System; + public static class Flattening { public class ModelObject diff --git a/AgileMapper.PerformanceTester/TestClasses/Foo.cs b/AgileMapper.PerformanceTesting/TestClasses/Foo.cs similarity index 91% rename from AgileMapper.PerformanceTester/TestClasses/Foo.cs rename to AgileMapper.PerformanceTesting/TestClasses/Foo.cs index ee81c954a..d2b13f380 100644 --- a/AgileMapper.PerformanceTester/TestClasses/Foo.cs +++ b/AgileMapper.PerformanceTesting/TestClasses/Foo.cs @@ -1,4 +1,4 @@ -namespace AgileObjects.AgileMapper.PerformanceTester.TestClasses +namespace AgileObjects.AgileMapper.PerformanceTesting.TestClasses { using System; using System.Collections.Generic; diff --git a/AgileMapper.sln b/AgileMapper.sln index b8a5ef7ca..90b2f7c81 100644 --- a/AgileMapper.sln +++ b/AgileMapper.sln @@ -16,7 +16,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.UnitTests", "AgileMapper.UnitTests\AgileMapper.UnitTests.csproj", "{A3F2D405-8C0B-4033-9EC5-1B64007593FB}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.PerformanceTester", "AgileMapper.PerformanceTester\AgileMapper.PerformanceTester.csproj", "{2B8A4535-7E5C-4DB6-BB86-06AEB4F3DE81}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.PerformanceTester.Net45", "AgileMapper.PerformanceTester.Net45\AgileMapper.PerformanceTester.Net45.csproj", "{2B8A4535-7E5C-4DB6-BB86-06AEB4F3DE81}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.UnitTests.NonParallel", "AgileMapper.UnitTests.NonParallel\AgileMapper.UnitTests.NonParallel.csproj", "{254D5970-FCEF-4386-8E5E-2028B765982B}" EndProject @@ -48,7 +48,11 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AgileMapper.UnitTests.NetCo EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.UnitTests.Net35", "AgileMapper.UnitTests.Net35\AgileMapper.UnitTests.Net35.csproj", "{E0706509-4A4B-4C0D-A3B2-4A713FFC6ED4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.UnitTests.Common", "AgileMapper.UnitTests.Common\AgileMapper.UnitTests.Common.csproj", "{69C1F1A9-F8A4-4CEE-90E3-67B8D6DAE8F6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AgileMapper.UnitTests.Common", "AgileMapper.UnitTests.Common\AgileMapper.UnitTests.Common.csproj", "{69C1F1A9-F8A4-4CEE-90E3-67B8D6DAE8F6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AgileMapper.PerformanceTesting", "AgileMapper.PerformanceTesting\AgileMapper.PerformanceTesting.csproj", "{F377844C-1A00-4685-8C04-07E6067C2812}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AgileMapper.PerformanceTester.NetCore21", "AgileMapper.PerformanceTester.NetCore21\AgileMapper.PerformanceTester.NetCore21.csproj", "{B5BA0B88-48C7-47AE-9236-719BFE67B0A9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -128,6 +132,14 @@ Global {69C1F1A9-F8A4-4CEE-90E3-67B8D6DAE8F6}.Debug|Any CPU.Build.0 = Debug|Any CPU {69C1F1A9-F8A4-4CEE-90E3-67B8D6DAE8F6}.Release|Any CPU.ActiveCfg = Release|Any CPU {69C1F1A9-F8A4-4CEE-90E3-67B8D6DAE8F6}.Release|Any CPU.Build.0 = Release|Any CPU + {F377844C-1A00-4685-8C04-07E6067C2812}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F377844C-1A00-4685-8C04-07E6067C2812}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F377844C-1A00-4685-8C04-07E6067C2812}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F377844C-1A00-4685-8C04-07E6067C2812}.Release|Any CPU.Build.0 = Release|Any CPU + {B5BA0B88-48C7-47AE-9236-719BFE67B0A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B5BA0B88-48C7-47AE-9236-719BFE67B0A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B5BA0B88-48C7-47AE-9236-719BFE67B0A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B5BA0B88-48C7-47AE-9236-719BFE67B0A9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE