Exemple #1
0
        private static void RunAsserts(TimeSpan?maxAverage, TimeSpan?maxTotal, StopwatchExtensions.TimedExecutionSummary executionSummary, Func <TimeSpan?, string> format)
        {
            if (maxTotal.HasValue && executionSummary.Total > maxTotal.Value)
            {
                throw new Exception($"{nameof(maxTotal)}: {format(maxTotal)} exceeded. Was: {format(executionSummary.Total)}");
            }

            if (maxAverage.HasValue && executionSummary.Average > maxAverage.Value)
            {
                throw new Exception($"{nameof(maxAverage)} exceeded");
            }
        }
Exemple #2
0
        public static StopwatchExtensions.TimedExecutionSummary Execute
            (Action action,
            int iterations      = 1,
            TimeSpan?maxAverage = null,
            TimeSpan?maxTotal   = null,
            string description  = "",
            string timeFormat   = DefaultTimeFormat,
            int maxTries        = 3)
        {
            maxAverage = maxAverage != default(TimeSpan) ? maxAverage : TimeSpan.MaxValue;
            maxTotal   = maxTotal != default(TimeSpan) ? maxTotal : TimeSpan.MaxValue;

            Func <TimeSpan?, string> format = date => date?.ToString(timeFormat) ?? "";

            StopwatchExtensions.TimedExecutionSummary executionSummary = null;
            for (int tries = 1; tries <= maxTries; tries++)
            {
                executionSummary = StopwatchExtensions.TimeExecution(action: action, iterations: iterations);
                try
                {
                    RunAsserts(maxAverage, maxTotal, executionSummary, format);
                }
                catch (Exception e)
                {
                    Debug.WriteLine($"Try: {tries} {e.GetType().FullName}: {e.Message}");
                    if (tries >= maxTries)
                    {
                        PrintSummary(iterations, maxAverage, maxTotal, description, format, executionSummary);
                        throw;
                    }
                    continue;
                }
                PrintSummary(iterations, maxAverage, maxTotal, description, format, executionSummary);
                break;
            }

            return(executionSummary);
        }
Exemple #3
0
     private static void PrintSummary
         (int iterations, TimeSpan?maxAverage, TimeSpan?maxTotal, string description, Func <TimeSpan?, string> format, StopwatchExtensions.TimedExecutionSummary executionSummary)
     {
         if (iterations > 1)
         {
             Console.WriteLine(
                 $@"Executed {iterations:N} iterations of {description}  
 Total:   {format(executionSummary.Total)} Limit: {format(maxTotal)} 
 Average: {format
                     (executionSummary.Average)} Limit: {format(maxAverage)}");
         }
         else
         {
             Console.WriteLine(
                 $@"Executed {iterations} iterations of {description}  
 Total:   {format(executionSummary.Total)} Limit: {format(maxTotal)}");
         }
     }