public static BenchResult Run <T>(ISerializerAdapter serializer, T instance)
            where T : IAssertEquality
        {
            BenchResult result = new BenchResult(serializer.GetType().Name, instance.GetType().Name);

            result.Warmup = TestRunner.TestRun(serializer, instance);

            for (int i = 0; i < Times; i++)
            {
                result.Results.Add(TestRunner.TestRun(serializer, instance));
            }

            return(result);
        }
        public void Run(ISerializerAdapter serializer, string[] args)
        {
            var iterations = args.Length > 0
                ? int.Parse(args[0])
                : _defaultIterations;

            var adapterName = serializer.GetType().Namespace.Split('.').Last();

            var tests = typeof(ISerializationTest).Assembly
                .GetTypes()
                .Where(t => t.IsClass && typeof(ISerializationTest).IsAssignableFrom(t))
                .Select(t => (ISerializationTest)Activator.CreateInstance(t));

            foreach(var test in tests)
            {
                Console.Write("{0}\t{1}\t", adapterName, test.GetType().Name);

                var graph = test.Graph;

                // Warmup
                RunTest(serializer, graph);

                if(!Stopwatch.IsHighResolution)
                {
                    Console.Error.WriteLine("Stopwatch is not high resolution!");
                }

                var timer = Stopwatch.StartNew();
                for (var i = 0; i < iterations; ++i)
                {
                    RunTest(serializer, graph);
                }
                var duration = timer.Elapsed;
                Console.WriteLine("{0}", duration.TotalMilliseconds / iterations);
            }
        }
        public void Run(ISerializerAdapter serializer, string[] args)
        {
            var iterations = args.Length > 0
                                ? int.Parse(args[0])
                                : _defaultIterations;

            var adapterName = serializer.GetType().Namespace.Split('.').Last();

            var tests = typeof(ISerializationTest).Assembly
                        .GetTypes()
                        .Where(t => t.IsClass && typeof(ISerializationTest).IsAssignableFrom(t))
                        .Select(t => (ISerializationTest)Activator.CreateInstance(t));

            foreach (var test in tests)
            {
                Console.Write("{0}\t{1}\t", adapterName, test.GetType().Name);

                var graph = test.Graph;

                // Warmup
                RunTest(serializer, graph);

                if (!Stopwatch.IsHighResolution)
                {
                    Console.Error.WriteLine("Stopwatch is not high resolution!");
                }

                var timer = Stopwatch.StartNew();
                for (var i = 0; i < iterations; ++i)
                {
                    RunTest(serializer, graph);
                }
                var duration = timer.Elapsed;
                Console.WriteLine("{0}", duration.TotalMilliseconds / iterations);
            }
        }