// Copyright (C) Stichting Deltares 2016. All rights reserved. // // This file is part of Ringtoets. // // Ringtoets is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . // // All names, logos, and references to "Deltares" are registered trademarks of // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. using System; using System.Globalization; using Core.Common.Base; using Core.Common.Base.Data; using Ringtoets.Common.Data.Properties; namespace Ringtoets.Common.Data.Probability { /// /// Class that holds helper methods for probabilities. /// public static class ProbabilityHelper { private static readonly Range probabilityValidityRange = new Range(0, 1); /// /// Checks whether the given is valid. /// /// The probability to check. /// Optional: true is should /// be considered a valid value. Default is false. /// true when is valid; false otherwise. public static bool IsValidProbability(double probability, bool isNaNValid = false) { if (isNaNValid && double.IsNaN(probability)) { return true; } return probabilityValidityRange.InRange(probability); } /// /// Checks if an argument is a valid probability value. /// /// The value to be validated. /// The name of the argument. /// Optional: true is should /// be considered a valid value. Default is false. /// Thrown when /// is not a valid probability value. public static void ValidateProbability(double probability, string paramName, bool isNaNValid = false) { ValidateProbability(probability, paramName, Resources.Probability_Must_be_in_Range_0_, isNaNValid); } /// /// Checks if an argument is a valid probability value. /// /// The value to be validated. /// The name of the argument. /// The custom message containing an insertion points /// (specifically {0}) for the validity range of . /// Optional: true is should /// be considered a valid value. Default is false. /// Thrown when /// is not a valid probability value. /// Thrown when /// doesn't contain a '{0}' insertion location for the range used to validate . public static void ValidateProbability(double probability, string paramName, string customMessage, bool isNaNValid = false) { if (!customMessage.Contains("{0}")) { throw new ArgumentException("The custom message should have a insert location (\"{0}\") where the validity range is to be inserted.", nameof(customMessage)); } if (!IsValidProbability(probability, isNaNValid)) { string message = string.Format(customMessage, probabilityValidityRange.ToString(FormattableConstants.ShowAtLeastOneDecimal, CultureInfo.CurrentCulture)); throw new ArgumentOutOfRangeException(paramName, message); } } } }