protected override IList <int[]> GenerateRunnerInput()
        {
            var tests       = new List <int[]>();
            var totalTestMs = 90 * 1000;
            var rapidGen    = new SleepInputGenerator(totalTestMs, 10, 15); // this is to reveal the CPU/MEM consumption when 10K QPS
            var totalCC     = 128;                                          // 128 is the optimum threads in typical 5 core web server

            for (var i = 0; i < totalCC; i++)
            {
                tests.Add(rapidGen.Generate());
            }
            return(tests);
        }
        private static ResponseDurationTrackerProvider <ResponseDurationTrackerStopWatch, ResponseDurationTrackerConfig, ResponseDurationTracker <ResponseDurationTrackerStopWatch, ResponseDurationTrackerConfig> > Provider = new ResponseDurationTrackerProvider <ResponseDurationTrackerStopWatch, ResponseDurationTrackerConfig, ResponseDurationTracker <ResponseDurationTrackerStopWatch, ResponseDurationTrackerConfig> >(); // declare as attribute of singleton, or can be stored in cache or IoC

        protected override IList <int[]> GenerateRunnerInput()
        {
            var tests       = new List <int[]>();
            var totalTestMs = 90 * 1000;
            var slowGen     = new SleepInputGenerator(totalTestMs, 200, 2 * 1000);
            var rapidGen    = new SleepInputGenerator(totalTestMs, 2000, 20 * 1000);
            var totalCC     = 128; // 128 is the optimum threads in typical 5 core web server

            for (var i = 0; i < totalCC / 2; i++)
            {
                tests.Add(slowGen.Generate());
                tests.Add(rapidGen.Generate());
            }
            return(tests);
        }