using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace WireMock.Matchers
{
///
/// MatchScores
///
public static class MatchScores
{
///
/// The tolerance
///
public const double Tolerance = 0.000001;
///
/// The default mismatch score
///
public const double Mismatch = 0.0;
///
/// The default perfect match score
///
public const double Perfect = 1.0;
///
/// The almost perfect match score
///
public const double AlmostPerfect = 0.99;
///
/// Is the value a perfect match?
///
/// The value.
/// true/false
public static bool IsPerfect(double value)
{
return Math.Abs(value - Perfect) < Tolerance;
}
///
/// Convert a bool to the score.
///
/// if set to true [value].
/// score
public static double ToScore(bool value)
{
return value ? Perfect : Mismatch;
}
///
/// Calculates the score from multiple values.
///
/// The values.
/// average score
[SuppressMessage("ReSharper", "PossibleMultipleEnumeration")]
public static double ToScore(IEnumerable values)
{
return values.Any() ? values.Select(ToScore).Average() : Mismatch;
}
///
/// Calculates the score from multiple values.
///
/// The values.
/// average score
[SuppressMessage("ReSharper", "PossibleMultipleEnumeration")]
public static double ToScore(IEnumerable values)
{
return values.Any() ? values.Average() : Mismatch;
}
}
}