static void TestMappersGeneric(OrderModel source, OrderModel target)
        {
            var mappers = new ObjectCopyBase <OrderModel, OrderModel>[]
            {
                new MapperSetterGeneric <OrderModel, OrderModel>()
            };

            var stopper  = new Stopwatch();
            var testRuns = 1000000;

            foreach (var mapper in mappers)
            {
                mapper.MapTypes();

                stopper.Restart();

                for (var i = 0; i < testRuns; i++)
                {
                    mapper.Copy(source, target);
                }

                stopper.Stop();

                var time = stopper.ElapsedMilliseconds / (double)testRuns;
                Console.WriteLine(mapper.GetType().Name + ": " + time);
            }
        }
        static void TestMappers(object source, object target)
        {
            var mappers = new ObjectCopyBase[]
            {
                new MapperUnoptimized(),
                new MapperOptimized(),
                new MapperDynamicCode(),
                new MapperLcg(),
                new MapperSetter()
            };

            var sourceType = source.GetType();
            var targetType = target.GetType();
            var stopper    = new Stopwatch();
            var testRuns   = 1000000;

            foreach (var mapper in mappers)
            {
                mapper.MapTypes(sourceType, targetType);

                stopper.Restart();

                for (var i = 0; i < testRuns; i++)
                {
                    mapper.Copy(source, target);
                }

                stopper.Stop();

                var time = stopper.ElapsedMilliseconds / (double)testRuns;
                Console.WriteLine(mapper.GetType().Name + ": " + time);
            }
        }