Skip to content

Commit

Permalink
Merge pull request #20 from natsnudasoft/issue-cleanup
Browse files Browse the repository at this point in the history
Issue cleanup
+semver: patch
  • Loading branch information
natsnudasoft committed Jul 20, 2017
2 parents ecc9267 + 26f7a80 commit 8617028
Show file tree
Hide file tree
Showing 4 changed files with 463 additions and 89 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,4 @@ obj
/tools/coverage.xml
/tools/artifact
/docs/Natsnudasoft/Help
/tools/NatsnudaLibrary_Release_Any_CPU.zip
183 changes: 177 additions & 6 deletions src/NatsnudaLibrary/ParameterValidation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
namespace Natsnudasoft.NatsnudaLibrary
{
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Diagnostics.Contracts;
Expand All @@ -40,7 +41,7 @@ public static class ParameterValidation
[ContractArgumentValidator]
public static void IsNotNull<T>([ValidatedNotNull]T value, string valueName)
{
if (value == null)
if (ReferenceEquals(value, null))
{
throw new ArgumentNullException(valueName);
}
Expand Down Expand Up @@ -92,7 +93,32 @@ public static void IsNotEmpty(string value, string valueName)
public static void IsGreaterThan<T>(T value, T compareValue, string valueName)
where T : IComparable<T>
{
if (value?.CompareTo(compareValue) <= 0)
if (ReferenceEquals(value, null) || value.CompareTo(compareValue) <= 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Invariant($"Value must be greater than {compareValue}."));
}
}

/// <summary>
/// Validates that the specified value is greater than a specified compare value.
/// </summary>
/// <typeparam name="T">The type of the value being validated.</typeparam>
/// <param name="value">The value to validate is greater than the specified compare value.
/// </param>
/// <param name="compareValue">The compare value to validate against.</param>
/// <param name="valueName">The name of the parameter being validated.</param>
/// <param name="comparer">The comparer to use to compare the specified values.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or
/// equal to <paramref name="compareValue"/>.</exception>
public static void IsGreaterThan<T>(
T value,
T compareValue,
string valueName,
IComparer<T> comparer)
{
if (comparer?.Compare(value, compareValue) <= 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Expand All @@ -113,7 +139,33 @@ public static void IsGreaterThan<T>(T value, T compareValue, string valueName)
public static void IsLessThan<T>(T value, T compareValue, string valueName)
where T : IComparable<T>
{
if (value?.CompareTo(compareValue) >= 0)
if ((ReferenceEquals(value, null) && ReferenceEquals(compareValue, null))
|| value?.CompareTo(compareValue) >= 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Invariant($"Value must be less than {compareValue}."));
}
}

/// <summary>
/// Validates that the specified value is less than a specified compare value.
/// </summary>
/// <typeparam name="T">The type of the value being validated.</typeparam>
/// <param name="value">The value to validate is less than the specified compare value.
/// </param>
/// <param name="compareValue">The compare value to validate against.</param>
/// <param name="valueName">The name of the parameter being validated.</param>
/// <param name="comparer">The comparer to use to compare the specified values.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is greater than
/// or equal to <paramref name="compareValue"/>.</exception>
public static void IsLessThan<T>(
T value,
T compareValue,
string valueName,
IComparer<T> comparer)
{
if (comparer?.Compare(value, compareValue) >= 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Expand All @@ -135,7 +187,34 @@ public static void IsLessThan<T>(T value, T compareValue, string valueName)
public static void IsGreaterThanOrEqualTo<T>(T value, T compareValue, string valueName)
where T : IComparable<T>
{
if (value?.CompareTo(compareValue) < 0)
if ((ReferenceEquals(value, null) && !ReferenceEquals(compareValue, null))
|| value?.CompareTo(compareValue) < 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Invariant($"Value must be greater than or equal to {compareValue}."));
}
}

/// <summary>
/// Validates that the specified value is greater than or equal to a specified compare
/// value.
/// </summary>
/// <typeparam name="T">The type of the value being validated.</typeparam>
/// <param name="value">The value to validate is greater than or equal to the specified
/// compare value.</param>
/// <param name="compareValue">The compare value to validate against.</param>
/// <param name="valueName">The name of the parameter being validated.</param>
/// <param name="comparer">The comparer to use to compare the specified values.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than
/// <paramref name="compareValue"/>.</exception>
public static void IsGreaterThanOrEqualTo<T>(
T value,
T compareValue,
string valueName,
IComparer<T> comparer)
{
if (comparer?.Compare(value, compareValue) < 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Expand Down Expand Up @@ -165,6 +244,32 @@ public static void IsLessThanOrEqualTo<T>(T value, T compareValue, string valueN
}
}

/// <summary>
/// Validates that the specified value is less than or equal to a specified compare
/// value.
/// </summary>
/// <typeparam name="T">The type of the value being validated.</typeparam>
/// <param name="value">The value to validate is less than or equal to the specified
/// compare value.</param>
/// <param name="compareValue">The compare value to validate against.</param>
/// <param name="valueName">The name of the parameter being validated.</param>
/// <param name="comparer">The comparer to use to compare the specified values.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is greater than
/// <paramref name="compareValue"/>.</exception>
public static void IsLessThanOrEqualTo<T>(
T value,
T compareValue,
string valueName,
IComparer<T> comparer)
{
if (comparer?.Compare(value, compareValue) > 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Invariant($"Value must be less than or equal to {compareValue}."));
}
}

/// <summary>
/// Validates that the specified value is between a specified exclusive minimum and maximum
/// value.
Expand All @@ -181,7 +286,38 @@ public static void IsLessThanOrEqualTo<T>(T value, T compareValue, string valueN
public static void IsBetween<T>(T value, T minValue, T maxValue, string valueName)
where T : IComparable<T>
{
if (value?.CompareTo(minValue) <= 0 || value?.CompareTo(maxValue) >= 0)
if (ReferenceEquals(value, null)
|| value.CompareTo(minValue) <= 0
|| value.CompareTo(maxValue) >= 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Invariant($"Value must be between {minValue} and {maxValue}."));
}
}

/// <summary>
/// Validates that the specified value is between a specified exclusive minimum and maximum
/// value.
/// </summary>
/// <typeparam name="T">The type of the value being validated.</typeparam>
/// <param name="value">The value to validate is between the specified minimum and maximum
/// value.</param>
/// <param name="minValue">The minimum value to validate against.</param>
/// <param name="maxValue">The maximum value to validate against.</param>
/// <param name="valueName">The name of the parameter being validated.</param>
/// <param name="comparer">The comparer to use to compare the specified values.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than or
/// equal to <paramref name="minValue"/>, or <paramref name="value"/> is greater than or
/// equal to <paramref name="maxValue"/>.</exception>
public static void IsBetween<T>(
T value,
T minValue,
T maxValue,
string valueName,
IComparer<T> comparer)
{
if (comparer?.Compare(value, minValue) <= 0 || comparer?.Compare(value, maxValue) >= 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Expand All @@ -205,7 +341,42 @@ public static void IsBetween<T>(T value, T minValue, T maxValue, string valueNam
public static void IsBetweenInclusive<T>(T value, T minValue, T maxValue, string valueName)
where T : IComparable<T>
{
if (value?.CompareTo(minValue) < 0 || value?.CompareTo(maxValue) > 0)
var isNotInclusiveNull = ReferenceEquals(value, null)
&& !ReferenceEquals(minValue, null)
&& !ReferenceEquals(maxValue, null);
if (isNotInclusiveNull
|| value?.CompareTo(minValue) < 0
|| value?.CompareTo(maxValue) > 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Invariant(
$"Value must be between {minValue} inclusive and {maxValue} inclusive."));
}
}

/// <summary>
/// Validates that the specified value is between a specified minimum inclusive and maximum
/// inclusive value.
/// </summary>
/// <typeparam name="T">The type of the value being validated.</typeparam>
/// <param name="value">The value to validate is between the specified minimum and maximum
/// value.</param>
/// <param name="minValue">The minimum inclusive value to validate against.</param>
/// <param name="maxValue">The maximum inclusive value to validate against.</param>
/// <param name="valueName">The name of the parameter being validated.</param>
/// <param name="comparer">The comparer to use to compare the specified values.</param>
/// <exception cref="ArgumentOutOfRangeException"><paramref name="value"/> is less than
/// <paramref name="minValue"/>, or <paramref name="value"/> is greater than
/// <paramref name="maxValue"/>.</exception>
public static void IsBetweenInclusive<T>(
T value,
T minValue,
T maxValue,
string valueName,
IComparer<T> comparer)
{
if (comparer?.Compare(value, minValue) < 0 || comparer?.Compare(value, maxValue) > 0)
{
throw new ArgumentOutOfRangeException(
valueName,
Expand Down
Loading

0 comments on commit 8617028

Please sign in to comment.