public static bool Evaluate(MetricsTestResult result, out string message)
        {
            var withinThresholds = result.LowerBoundThreshold <= result.PercentDiff && result.PercentDiff <= result.UpperBoundThreshold;

            message = withinThresholds ? $"Test for {result.MetricName} succeeded as {result.PercentDiff:0.##}% is within {result.LowerBoundThreshold:0.##}% and {result.UpperBoundThreshold:0.##}%." :
                      MetricsTestResult.ConstructFailureMessage(result);
            return(withinThresholds);
        }
 public static void Evaluate(
     IEnumerable <MetricsTestResult> results,
     out string accumulatedMessage,
     out bool accumulatedWithinThresholds)
 {
     accumulatedMessage          = string.Empty;
     accumulatedWithinThresholds = true;
     foreach (var result in results)
     {
         // If thresholds are not set properly, default to failure
         string message;
         bool   withinThresholds = MetricsTestResult.Evaluate(result, out message);
         accumulatedMessage          += message;
         accumulatedWithinThresholds &= withinThresholds;
     }
 }
        /// <summary>
        /// Constructs the failure message.
        /// </summary>
        /// <param name="result">The result.</param>
        /// <returns>System.String.</returns>
        public static string ConstructFailureMessage(MetricsTestResult result)
        {
            var failureMessage = $"Date {result.Date:d}, Metric {result.MetricName}";

            if (result.PercentDiff < result.LowerBoundThreshold)
            {
                failureMessage += $"Lower bound threshold: {result.LowerBoundThreshold}%";
            }
            else if (result.PercentDiff > result.UpperBoundThreshold)
            {
                failureMessage += $"Upper bound threshold: {result.UpperBoundThreshold}%";
            }

            failureMessage += $", Breached threshold: {result.PercentDiff:0.##}%.";

            return(failureMessage);
        }