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